10

我有一个有两个 segues 的应用程序。在其中一个场景中,当前视图控制器成为委托,而另一个则不是。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"MoreOptions"]) {
        UINavigationController *navigationController = segue.destinationViewController;
        MoreOptionsViewController *controller = (MoreOptionsViewController *)navigationController.topViewController;
        controller.delegate = self;
    } else if ([segue.identifier isEqualToString:@"FullStoryView"]) {
        SingleStoryViewController *detailViewController = segue.destinationViewController;
        detailViewController.urlObject = sender;
    }
}

所有这些都运行良好,但我想尝试更好地理解代码。我不明白的是,我必须通过从 navigationController.topViewController 获取对 MoreOptionsViewController 的引用,而不是像在第二个 if 条件中那样简单地从 segue.destinationViewController 获取它。是因为我将当前视图控制器(自我)设置为委托吗?再说一次,我不是想解决问题,只是想更好地了解正在发生的事情。

4

2 回答 2

11

看看你的故事板,应该很清楚为什么会这样。您已嵌入MoreOptionsViewControlleraUINavigationController并将 segue 连接到导航控制器,从而使其成为destinationViewController. 这是相当普遍的。

于 2011-12-20T19:11:41.630 回答
4

代表在您的问题的上下文中基本上无关紧要。

您的第一个 segue 的目的地是导航控制器,其中包含您真正感兴趣的视图控制器。因此,要访问该视图,您需要通过导航控制器,因为它没有您感兴趣的任何属性设置。

您的第二个 segue 直接进入单个视图控制器,因此您可以直接访问它。

于 2011-12-20T19:11:01.563 回答