2013-07-18 80 views
11

我想知道當前加載的故事板是什麼,我使用了下面的代碼,但它仍然讓我的主要故事板不是當前。如何知道當前的故事板名稱?

//This get me the Main storyboard 
[[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"]; 

回答

11

如果你是在一個UIViewController類是instantied或塞格斯通過故事板最簡單的方式工作是:

UIStoryboard *storyBoard = self.storyboard; 

如果你是在一個UIView類,它是在一個UIViewController

UIResponder *responder = self; 
while (![responder isKindOfClass:[UIViewController class]]) { 
    responder = [responder nextResponder]; 
    if (nil == responder) { 
     break; 
    } 
} 
UIViewController *viewController = (UIViewController *) responder; 
UIStoryboard *storyBoard = viewController.storyboard; 
+7

我怎麼能得到什麼名字? ? – wod

-2

只要做到這一點,這可以解決您的查詢

NSString *storyboardName; 
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    storyboardName = @"iPad"; 
} else { 
    storyboardName = @"iPhone"; 
} 
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:storyboardName bundle:nil]; 
+0

可能是你不明白我的問題,我想知道這個名字沒有設置故事板的名字 – wod

+0

你有沒有通過這個鏈接:http://stackoverflow.com/questions/14928817/identify-which-storyboard-is -active –

28

大廈Durican的回答以上:

在一個視圖控制器:

UIStoryboard * storyboard = self.storyboard; 
NSString * storyboardName = [storyboard valueForKey:@"name"]; 

(該名稱將不包括 「.storyboard」 文件擴展名。)

+0

完美的解決方案。謝謝。 – VaporwareWolf

+0

問題。你是怎麼想出來的?文檔沒有提及任何有關名稱屬性的內容。我沒有看到查詢所有密鑰的方法。您是否從IB標籤刺戳過它? – VaporwareWolf

+0

只是一個完整的猜測,我測試了它,結果證明我是對的。 :) – Xiphias