我有两个申请的应用程序。在其中一种情况下,当前 View Controller 将成为委托(delegate),而另一种则不会。
- (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来获得对它的引用。是因为我将当前 View Controller (自身)设置为委托(delegate)吗?再说一次,我并不是要解决问题,只是想更好地了解正在发生的事情。
最佳答案
看一下您的 Storyboard ,很明显为什么会这样。您已将MoreOptionsViewController
嵌入UINavigationController
中,并将segue连接到导航 Controller ,从而使其成为destinationViewController
。这是相当普遍的。
关于ios - prepareForSegue和代表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8580429/