2012-04-24 42 views
3

我有一堆在UIStoryBoard中定義的視圖控制器。我喜歡將它們全部放在一個地方以方便訪問。但是,我遇到了一個問題,我需要在應用程序中的其他地方實例化視圖控制器的副本。 是否有可能使用它在故事板中定義的接口以編程方式創建UIViewController?iPhone UIStoryBoard是否可以通過程序創建一個界面在故事板中定義的控制器?

否則,我將不得不復制該控制器的故事板視圖到一個單獨的.xib文件並手動加載視圖。

謝謝您的澄清!

回答

4

是的,它一點也不差! -instantiateInitialViewController是你在找什麼。

一個輔助我傾向於使用是:

- (void) loadStoryboard:(NSString *)storyboardName animated:(BOOL)animated 
{ 
    if ([_currentStoryboard isEqual:storyboardName]) 
    { 
    return; 
    } 

    _currentStoryboard = storyboardName; 

    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil]; 
    UIViewController* newRootController = [storyboard instantiateInitialViewController]; 

    if (!animated) 
    { 
    self.window.rootViewController = rootController; 
    return; 
    } 

    newRootController.view.alpha = 0.0; 
    [self.window addSubview:newRootController.view]; 

    [UIView animateWithDuration:0.5 animations:^{ 
    newRootController.view.alpha = 1.0; 
    } completion:^(BOOL finished) { 
    self.window.rootViewController = newRootController; 
    }]; 
} 

這種變異被設置爲傾銷地是你的AppDelegate - 應該是很容易適應大多數情況下,雖然。

+0

我正在尋找加載在故事板中定義的特定視圖控制器,而不是初始視圖控制器。這可能嗎? – 2012-04-25 15:45:44

+4

是的,UIStoryboard上可能幫助你的另一種方法是' - (id)instantiateViewControllerWithIdentifier:(NSString *)identifier'。你可能想考慮把事情分解成多個故事板,但是(如果它在你的上下文中有意義) - 到目前爲止,該模式對我的項目真的很有幫助 – Nevir 2012-04-25 18:13:50

相關問題