将对象传回并弹出两个视图控制器

时间:2013-03-20 18:51:32

标签: xcode

我去年年底开始学习Objective C和编程,我正在处理Core Data,所以我需要一些帮助。

我正在尝试在VC3中选择一个对象,并在按下“选择”按钮时将其传递给VC1。按下后,它会弹回VC1并在单元格中显示对象。我不认为我可以使用segue,因为我想回去而不是前进。另外,我不会回到根视图控制器。

除此问题外,其他所有内容都适用于segues,协议和代理。我试过代表,但它们似乎没有用,也许是因为它们之间有一个视图控制器。但是,我对编程很新,所以我错了。 我希望得到一些帮助和指导。

1 个答案:

答案 0 :(得分:1)

这样做的现代方法(ios6 +)是一个放松的segue

您可以通过定义一个采用storyBoardSegue的单个参数的方法来创建其中一个。

- (IBAction)unwindOnSelect:(UIStoryboardSegue *)segue;

将此方法添加到要展开的viewController。

然后,在故事板场景中,您要放松... CTRL-从“选择”按钮拖动到场景底部栏中的绿色“退出”符号。展开segue应作为选项出现在弹出窗口中。选择它。您的按钮将展开您到目的地,并将执行展开segue方法中的代码。

segue对象拥有对源和目标viewControllers的引用,因此您可以将数据从一个引用到另一个。

  - (void)unwindOnSelect:(UIStoryboardSegue *)segue
{

       self.myObject = segue.sourceViewController.myProperty;

}

你可能会在这里得到一个错误,“没有已知的选择器实例方法”myProperty“。另一种方法是在VC1的.h或.m文件顶部#include "viewController3"。你可能需要进行类型转换以及:

       self.myObject = [(ViewController1*)segue.sourceViewController myProperty];

另一种方式是一点间接:

if ([segue.sourceViewController respondsToSelector:@selector(myProperty)]) {
    self.myObject = [segue.sourceViewController performSelector:@selector(myProperty)];
     }

这样做的好处是你不需要#include "viewController3",所以你会更加分离,更加客观化。