2011-12-20 34 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直接轉到單個視圖控制器,因此您可以直接訪問它。