执行此操作的现代方式(ios6+)是使用 unwind segue
您可以通过定义一个采用 storyBoardSegue 的单个参数的方法来创建其中一个。
- (IBAction)unwindOnSelect:(UIStoryboardSegue *)segue;
将此方法添加到要展开的 viewController 中。
然后,在情节提要场景中,您要从... CTRL 键从“选择”按钮拖动到场景底部栏中的绿色“退出”符号。unwind segue 应该作为一个选项出现在弹出窗口中。选择它。您的按钮会将您展开到该目的地,并且将执行 unwind segue 方法中的代码。
segue 对象包含对源视图控制器和目标视图控制器的引用,因此您可以从一个视图控制器获取数据到另一个视图控制器。
- (void)unwindOnSelect:(UIStoryboardSegue *)segue
{
self.myObject = segue.sourceViewController.myProperty;
}
你可能会在这里得到一个错误,“没有选择器“myProperty”的已知实例方法。解决这个问题的一种方法是#include "viewController3"
在 VC1 的 .h 或 .m 文件的顶部。你可能还必须进行类型转换:
self.myObject = [(ViewController1*)segue.sourceViewController myProperty];
另一种方法是有点间接:
if ([segue.sourceViewController respondsToSelector:@selector(myProperty)]) {
self.myObject = [segue.sourceViewController performSelector:@selector(myProperty)];
}
这样做的好处是您不必这样做#include "viewController3"
,因此您可以更加解耦,更加客观化。