是否可以从一个故事板转到另一个故事板,或者将故事板嵌入到另一个故事板中的视图控制器中?我需要在UITabBarController
中放置一个UINavigationController
,我想让它们保持良好和分离。
答案 0 :(得分:200)
是的,但您必须以编程方式执行此操作:
// 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];
答案 1 :(得分:114)
从Xcode 7开始,您可以使用故事板参考:
以图形方式执行此操作将故事板参考添加到故事板。在ViewController和Storyboard Reference(ctrl + drag)之间创建segue
然后填写这些字段。
其中“Tutorial”是“Tutorial.storyboard”文件 “MainTutorialController”是ViewControllerSettings中的“Storyboard ID”字段
答案 2 :(得分:10)
您无法手动执行segues,因为UIStoryboardSegue是一个抽象类。您需要对其进行子类化并实现perform
以使其执行任何操作。它们真的意味着在故事板中创建。但是,您可以手动推送视图控制器,这是一个很好的解决方案。 lnafziger的答案很好:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
[self.navigationController pushViewController:theTabBar animated:YES];
但有一点需要注意的是,你已经说过要保持良好和分离。故事板的想法是让您在一个地方完成所有设计工作时保持独立。每个视图控制器都很好,并且在故事板中与其他视图控制器分开。整个想法是将它们放在一个地方。只是把它整理好,以便它有条理,你会很高兴去。除非你有充分的理由这样做,否则你不应将它分开。
答案 3 :(得分:7)
您不应将UITabBarControllers放在UINavigationController中。它要求像错误的自动旋转/查看卸载等错误,因为Apple doesn't support这种遏制:
但是,在组合视图控制器时,包含顺序很重要;只有某些安排有效。从孩子到父母的遏制顺序如下:
- 内容视图控制器和具有灵活范围的容器视图控制器(例如页面视图控制器)
- 导航视图控制器
- 标签栏控制器
- 拆分视图控制器
答案 4 :(得分:4)
这是一个快速版本:
let targetStoryboardName = "Main"
let targetStoryboard = UIStoryboard(name: targetStoryboardName, bundle: nil)
if let targetViewController = targetStoryboard.instantiateInitialViewController() {
self.navigationController?.pushViewController(targetViewController, animated: true)
}
答案 5 :(得分:-1)
您是否尝试过以下操作:
2 /单击以选择链接到导航控制器的视图控制器,并在顶部菜单中:编辑器 - >嵌入 - >标签栏控制器
注意:我没有测试它,因为我正在使用相反的方法:制作标签栏应用程序并将导航控制器放在里面。