2011-12-20 56 views
10

我有两个segues的应用程序。在其中一个阶段中,当前的视图控制器成为委托,而另一个则不成立。prepareForSegue和代表

- (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获取它,就像我在第二个条件中那样。是否因为我将当前视图控制器(self)设置为委托?再次,我不是在试图解决问题,只是为了更好地理解发生的事情。

回答

11

看看你的故事板,它应该是明显的原因为什么这样。您已将MoreOptionsViewController嵌入UINavigationController中,并将一个segue连接到导航控制器,从而使其成为destinationViewController。这很常见。

+0

啊是的,有时答案是在普通的网站,是不是?谢谢。 – 2011-12-20 19:25:14

4

代表在你的问题的背景下基本上是不相关的。

你的第一个赛格瑞的目的地是一个导航控制器,它包含了视图控制器,你是真的兴趣,因此获得该视图,你需要去通过导航控制器,因为这不会有任何属性,你有兴趣设置。

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