prepareForSegue和delegates

时间:2011-12-20 18:50:58

标签: ios delegates segue

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

- (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的引用,而不是简单地从segue.destinationViewController获取它,就像我在第二个if条件中那样。是因为我将当前视图控制器(self)设置为委托吗?同样,我并不是想解决问题,只是想更好地了解正在发生的事情。

2 个答案:

答案 0 :(得分:11)

看看你的故事板,应该很清楚为什么会这样。您已将MoreOptionsViewController嵌入UINavigationController并将segue连接到导航控制器,从而使其成为destinationViewController。这很常见。

答案 1 :(得分:4)

代表在你的问题背景下基本上无关紧要。

你的第一个segue目的地是一个导航控制器,其中包含你真正感兴趣的视图控制器。因此,为了进入该视图,你需要通过导航控制器,因为这不会有你感兴趣的任何属性设置。

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