iPhone UIStoryBoard是否可以以编程方式创建一个带有故事板中定义的接口的控制器?

时间:2012-04-24 01:24:21

标签: iphone ios5 uiviewcontroller uistoryboard

我在UIStoryBoard中定义了一堆视图控制器。我喜欢将它们放在一个地方以便于访问。但是,我遇到了一个问题,我需要在应用程序中的其他位置实例化视图控制器的副本。 是否可以使用故事板中定义的界面以编程方式创建UIViewController?

否则我必须将该控制器的故事板视图复制到单独的.xib文件中并手动加载视图。

感谢您的澄清!

1 个答案:

答案 0 :(得分: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的倾倒场而设置的 - 应该可以轻松适应大多数情况。