是否可以从一个情节提要板切换到另一个情节提要板,或者将情节提要板嵌入到另一个情节提要板的视图控制器中?我需要放置UITabBarController
在一个UINavigationController
,我想,让他们好和分离。
是否可以从一个情节提要板切换到另一个情节提要板,或者将情节提要板嵌入到另一个情节提要板的视图控制器中?我需要放置UITabBarController
在一个UINavigationController
,我想,让他们好和分离。
Answers:
是的,但是您必须以编程方式执行此操作:
// Get the storyboard named secondStoryBoard from the main bundle:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
// Load the initial view controller from the storyboard.
// Set this by selecting 'Is Initial View Controller' on the appropriate view controller in the storyboard.
UIViewController *theInitialViewController = [secondStoryBoard instantiateInitialViewController];
//
// **OR**
//
// Load the view controller with the identifier string myTabBar
// Change UIViewController to the appropriate class
UIViewController *theTabBar = (UIViewController *)[secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
// Then push the new view controller in the usual way:
[self.navigationController pushViewController:theTabBar animated:YES];
从Xcode 7开始,您可以使用情节提要参考以图形方式执行此操作:
将情节提要参考添加到您的情节提要。在ViewController和Storyboard Reference之间创建序列(Ctrl +拖动)
然后填写此字段。
其中“ Tutorial”是“ Tutorial.storyboard”文件,“ MainTutorialController”是ViewControllerSettings中的“ Storyboard ID”字段
因为UIStoryboardSegue是一个抽象类,所以您实际上不能手动进行segues。您需要对其进行子类化和实现perform
,以使其能够执行任何操作。它们实际上是要在情节提要中创建的。不过,您可以手动推动视图控制器,这是一个很好的解决方案。lnafziger的答案做得很好:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
[self.navigationController pushViewController:theTabBar animated:YES];
但是要注意的一件事是,您说过要保持美观和独立。情节提要的想法是使您可以在一个地方进行所有设计工作的同时将各个部分分开。每个视图控制器都很不错,并且在情节提要板中彼此分离。整个想法是将所有内容都放在一个地方。只需将其布置得井井有条即可,以便井井有条,而且您会很方便。除非有充分的理由,否则不要分离它。
您不应将UITabBarControllers放在UINavigationController中。它正在询问错误的信息,例如错误的自动旋转/视图卸载等,因为Apple 不支持这种限制:
但是,在组合视图控制器时,包含的顺序很重要。只有某些安排有效。从孩子到父母的收容顺序如下:
- 内容视图控制器和具有灵活边界的容器视图控制器(例如页面视图控制器)
- 导航视图控制器
- 标签栏控制器
- 分割视图控制器
这是一个快速版本:
let targetStoryboardName = "Main"
let targetStoryboard = UIStoryboard(name: targetStoryboardName, bundle: nil)
if let targetViewController = targetStoryboard.instantiateInitialViewController() {
self.navigationController?.pushViewController(targetViewController, animated: true)
}