0

我是故事板的新手,我正在尝试在表格视图控制器之间移动。

我了解如何设置 segue 以及如何将数据发送到新故事板,但我的问题是返回数据。如果我使用 push 风格的 segue,它会给我一个自动后退按钮。我想要一个页面,它会创建一个“工作”并在他们点击保存时保存它(我在标题的另一侧创建的条形按钮)当我设置 segue 以从保存按钮返回主页时使那个主表视图控制器成为一个孩子(而不是简单地回到它的原始状态)。我正在考虑的解决方法是在他们点击保存时将其保存到文件中,并且每当他们加载主表视图时,它都会从该文件加载。这是一种常见且正确的方法,还是我应该尝试返回该对象并将其保存在主表视图控制器中?

4

2 回答 2

1

一种常见的方法是使用委托。由于 ViewController 应该尽可能独立,因此我们必须尽量减少它们之间的依赖关系。实际上,如果我理解正确,您对文件的想法也是如此。但是使用文件来组织 ViewController 之间的通信并不是很方便。通常你为你的第二个 ViewController 声明一个 @protocol SecondViewControllerDelegate (你点击一个“保存”按钮)。使用以下方法:

@protocol YourSecondViewControllerDelegate <NSObject>
-(void)yourSecondViewControllerDidCancel:(YourSecondViewController*)controller; //if you have a cancel button
-(void)yourSecondViewControllerDidFinish:(YourSecondViewController*)controller yourDataToReturn:(SomeData*)data andSomeMoreData:(AnotherDataType*)data2;
@end

然后将这样的属性添加到您的 SecondViewController:

@property (nonatomic, assign) id<YourSecondViewControllerDelegate> delegate; //Do not retain it!

然后你在 MainViewController 中采用你的协议。

@interface MainViewController()<YourSecondViewControllerDelegate> //you can do it in the private category to keep the class interface clear.
@end
@implementation
//don't forget to implement those methods here :)
@end

当您从 MainViewController 触发 segue 时,您可以将 MainViewController 设置为 SecondViewController 的委托:

SecondViewController *destinationController = [[SecondViewController alloc] init]; //Just for example.
destinationController.delegate = self;
//trigger a segue :)

当用户按下 SecondViewController 中的 Save 按钮时,您调用委托的 yourSecondViewControllerDidFinish:

[self.delegate yourSecondViewControllerDidFinish: self yourDataToReturn: someData andSomeMoreDate: someMoreData];

这样 MainController 的 yourSecondViewControllerDidFinish 方法就会被调用。你可以在那里选择 someData 和 someMoreData 。

您可以在本教程中获得有关它的更多详细信息: Apple's your second iOS app tutorial

于 2013-04-29T03:29:32.137 回答
1

如果您正在制作一个转场以“返回”到控制器,那么该转场需要是一个展开转场。unwind segue 会返回到您最初来自的控制器的同一实例。如果您需要将数据发送回该控制器,您可以在 prepareForSegue 中完成。

于 2013-04-29T03:09:45.650 回答