destinationViewController

destinationViewController

我有两个申请的应用程序。在其中一种情况下,当前 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/

10-13 05:34