0

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

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

除了这个问题,其他一切都适用于 segue、协议和委托。我尝试过委托,但它们似乎不起作用,可能是因为它们之间有一个视图控制器或其他什么。但是,我对编程很陌生,所以我可能是错的。我将不胜感激一些帮助和指导。

4

1 回答 1

1

执行此操作的现代方式(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",因此您可以更加解耦,更加客观化。

于 2013-03-20T21:16:43.080 回答