prepareForSegue和代表
我有两个赛段的应用程序。 在其中一个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抓取它而不是简单地从segue.destinationViewController像我在第二条件如果条件获取引用的MoreOptionsViewController。 是因为我设置当前的视图控制器(自我)作为委托? 再次,我不是在试图解决问题,只是为了更好地理解发生的事情。
看看你的故事板,这应该是明显的原因是这样的。 您已经在UINavigationController
embedded了MoreOptionsViewController
,并将一个segue连接到导航控制器,从而使其成为destinationViewController
。 这是相当普遍的。
代表在很大程度上与您的问题无关。
您的第一个segue的目标是一个导航控制器,其中包含您真正感兴趣的视图控制器。因此,要进入该视图,您需要通过导航控制器,因为它没有任何您有兴趣设置的属性。
你的第二个segue直接到一个单一的视图控制器,所以你可以直接访问它。