2012-03-07 47 views
7

我有一個iPhone應用程序,目前我正在使用Storyboard在XCode 4.3中構建。我有一個具有兩個(2)seques的「根」視圖控制器到包含UIWebView的視圖控制器。我希望能夠識別segue(已經爲這兩個segues設置了唯一標識符),因此我可以將正確的內容「推送」到UIWebView,這是基於在「root」視圖控制器中激活了哪個segue。如何處理去同一視圖控制器的兩個賽段?

我想我必須使用「prepareForSegue」方法,但不知道它會去哪裏。我在哪裏可以找到如何處理兩個賽段到同一個視圖控制器? (我已經谷歌,並沒有發現適合我的情況)。

這裏是我正在使用的代碼:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"helpSegue"]) { 
     NSLog(@"helpSegue"); 
    } 
    else if ([segue.identifier isEqualToString:@"reportSegue"]) { 
     NSLog(@"reportSegue"); 
    } 
} 

回答

3

你不會叫-prepareForSegue:sender:,你會在你的視圖控制器實現它。在該方法中它的覆蓋,您可以檢查SEGUE的identifier屬性(在SEGUE傳遞作爲參數):

if ([segue.identifier isEqualToString:@"Segue Numero Uno"]) { 
    // do something here 
} 

這可以讓你採取某種行動,這取決於賽格瑞導致的過渡。您可以在故事板編輯器中爲每個segue設置標識符。

更新:根據您在評論中提供的代碼(我已添加到您的問題中),您現在已經有了正確的想法。在這一點上,這只是一個老式的調試問題。有些事情要檢查:

  • 是在你的故事板視圖控制器設置爲將實現該-prepareForSegue:sender:的類的實例(即,有關鉛塞格斯到一個)?檢查故事板中的控制器類型。

  • 您在代碼中使用的字符串是否與您爲故事板中的segues設置的標識符相匹配?大寫字母,拼寫,標點符號和空格都很重要。

  • 您的-prepareForSegue:sender:方法被調用?在那裏放置一個斷點並進行調試。如果它被調用,傳入的segue的標識符是什麼?如果未被調用,故事板中的視圖控制器沒有正確的類。

+0

謝謝,謝謝,謝謝!這正是我所需要的... – SpokaneDude 2012-03-07 22:14:27

+0

糟糕...對不起,但沒有「seque.identifier.isEqualToString方法...我把 - (void)[prepareForSegue in ViewController.m,這是項目中唯一的控制器代碼,我做錯了什麼嗎? – SpokaneDude 2012-03-07 22:33:37

+0

'-isEqualToString:'是NSString的一個方法(不是屬性),UIStoryboardSegue的''identifier'屬性是一個NSString *,所以你使用它,就像我在上面的代碼中顯示的那樣。 'BOOL isEqual = [segue.identifier isEqualToString:@「foo」];'。的確,您可以使用點語法來調用任何不帶參數的方法(儘管您應該只用它來表示屬性),但'-isEqualToString:'*確實需要一個參數,所以點語法是完全沒有的。 – Caleb 2012-03-07 22:44:01

相關問題