我有两个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)设置为委托吗?同样,我并不是想解决问题,只是想更好地了解正在发生的事情。
答案 0 :(得分:11)
看看你的故事板,应该很清楚为什么会这样。您已将MoreOptionsViewController
嵌入UINavigationController
并将segue连接到导航控制器,从而使其成为destinationViewController
。这很常见。
答案 1 :(得分:4)
代表在你的问题背景下基本上无关紧要。
你的第一个segue目的地是一个导航控制器,其中包含你真正感兴趣的视图控制器。因此,为了进入该视图,你需要通过导航控制器,因为这不会有你感兴趣的任何属性设置。
您的第二个segue直接转到单个视图控制器,因此您可以直接访问它。