3

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

否则,我将不得不将该控制器的情节提要视图复制到单独的 .xib 文件中并手动加载视图。

谢谢你的澄清!

4

1 回答 1

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——不过,应该很容易适应大多数情况。

于 2012-04-24T01:32:10.250 回答