2012-04-24 51 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

相关问题