返回推送segue

时间:2013-04-29 03:06:04

标签: objective-c storyboard segue

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

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

2 个答案:

答案 0 :(得分:1)

如果你让一个segue“回”到一个控制器,那么那个segue需要是一个放松的segue。展开segue将返回到您最初来自的控制器的同一实例。如果需要将数据发送回该控制器,可以在prepareForSegue中进行。

答案 1 :(得分:1)

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

@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按钮时,你调用委托你的secondSecondViewControllerDidFinish:

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

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

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