有是故事板魔法来实现这一目标。它被称为放松赛。在A的.h文件中,您可以实现所需的任何“目标动作”风格方法,但无论您需要多少放松方式。对于一个模式,通常是两个(取消和保存)。所以在我的文件啊我要补充:
// A.h file
- (IBAction)myCancelUnwindSegueCallback:(UIStoryboardSegue *)segue;
- (IBAction)mySaveUnwindSegueCallback:(UIStoryboardSegue *)segue;
现在,在你的故事板,如果你从A到B.现在,您可以从您的取消/保存按钮做了“目标行动”的风格控制拖动SEGUE在B中到故事板中B控制器底部的绿色“退出”图标。当你这样做的时候,Xcode会选择我们创建的两个方法(因为它们在A的头文件中,并且它们有正确的签名(例如IBAction和UIStoryboardSegue *),而B是来自A的segue的目的地)你有它。你有你想要的故事板魔法!
在两个回调的实现,你会的东西,如:
// A.m file
- (IBAction)myCancelUnwindSegueCallback:(UIStoryboardSegue *)segue {
UIViewController *modalGoingAway = segue.sourceViewController;
// Do something (like get data) from modalGoingAway if you need to...
}
- (IBAction)mySaveUnwindSegueCallback:(UIStoryboardSegue *)segue {
UIViewController *modalGoingAway = segue.sourceViewController;
// Do something (like get data) from modalGoingAway if you need to...
}
最后,如果这种方法满足你的需求,伟大的。你完成了。但是,如果“取消”或“保存”时我仍然连线整个协议委托/数据源设计模式,我希望在将控制权交给A以将B从视图层次结构中移除之前,对B的私有属性执行一些操作。
很酷,不知道呈现ViewController(显然是一个新的iOS 5的东西),这有助于。 – Jaanus 2012-03-16 06:28:23
是的,如果你想将它作为一个自定义的继续以方便重用,你可以做一些类似于 - (void)执行{UIViewController * src =(UIViewController *)self.sourceViewController; [src.presentingViewController dismissModalViewControllerAnimated:YES]; } – AppHandwerker 2012-08-10 14:02:58
@SimonH关于segues的最佳建议! – 2012-10-06 21:19:13