我在 UIStoryBoard 中定义了一堆视图控制器。我喜欢将它们都放在一个地方以便于访问。但是,我遇到了一个问题,我需要在应用程序的其他位置实例化视图控制器的副本。是否可以使用故事板中定义的接口以编程方式创建 UIViewController?
否则,我将不得不将该控制器的情节提要视图复制到单独的 .xib 文件中并手动加载视图。
谢谢你的澄清!
我在 UIStoryBoard 中定义了一堆视图控制器。我喜欢将它们都放在一个地方以便于访问。但是,我遇到了一个问题,我需要在应用程序的其他位置实例化视图控制器的副本。是否可以使用故事板中定义的接口以编程方式创建 UIViewController?
否则,我将不得不将该控制器的情节提要视图复制到单独的 .xib 文件中并手动加载视图。
谢谢你的澄清!
是的,而且一点也不坏! -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
——不过,应该很容易适应大多数情况。