2013-05-11 164 views
0

我正在使用3個storyBoard和一段代碼我得到了ViewController的標識符,但無法調用instantiateViewControllerWithIdentifier,因爲我不知道哪個storyBoard屬於它。從ViewController獲取StoryBoard標識

問題是:是否有可能使用ViewController標識符獲取StoryBoard實例/標識符?

此致敬禮!

回答

1

我的應用程序有類似的問題。多視圖控制器和多個故事板。 我只是使用包含我的視圖控制器的故事板的名稱並創建它的新實例。而且,我正在從該故事板實例化一個新的視圖控制器。

UIStoryboard * st = [UIStoryboard storyboardWithName:@"storyboardWithViewControllerName" bundle:nil]; 
YourViewController * vc = [st instantiateViewControllerWithIdentifier:@"YourViewControllerId"]; 

希望它可以幫助

2

可以調用instantiateViewControllerWithIdentifier,但如果具有該標識符的視圖控制器不存在,您將返回一個零值。

您可以在三個故事板上測試這種方式,直到找到與nil不同的值。

Apple documentation

編輯:檢測到異常後(對不起,蘋果文檔是有點有時混淆),你可以做的是包裝你的代碼像這樣

@try { 
     UIViewController *myViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"myViewControllerID"]; 
    } 
    @catch (NSException *exception) { 
     DLog(@"Exception: This is not the storyboard"); 
    } 
    @finally { 
     DLog(@"I found it!"); 
    } 
一個try/catch塊
+0

當我嘗試它的應用程序崩潰:'故事板()不包含視圖控制器與標識符'blabla'' – MontiRabbit 2013-05-12 02:21:14

0

我已經研究過類似的問題對我的應用程序天。據我所知,無法確定故事板是否包含特定的viewcontroller ID。 Apple的文檔希望您事先知道這一點,如果找不到id,它會立即引發異常。

我見過使用try-catch塊的建議。玩過它們之後,我發現踏上了非常薄的冰面,如果你有多個故事板可以測試,它會很快變得相當複雜的IMO。

我在我的應用程序中採用的一種方法是爲視圖控制器提供一個命名方案,它基本上包含它所屬的故事板的信息。例如,故事板1中的所有視圖控制器都以「1 -...」開頭。然後,您可以通過字符串函數在代碼中提取此代碼,並即時實例化正確的故事板。

相關問題