还有另一个故事板?

是否有可能从一个故事板到另一个故事板,或者在另一个故事板中的视图控制器中embedded故事板? 我需要在UINavigationController放置一个UITabBarController ,我想保持它们的好分离。

是的,但你必须以编程方式进行:

 // 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开始,您可以使用Storyboard Reference以graphics方式执行此操作:

参考

添加故事板引用到你的故事板。 在ViewController和Storyboard Reference之间创buildsegue(按Ctrl +拖动)

然后填写这些字段。

在这里输入图像说明

其中“Tutorial”是“Tutorial.storyboard”文件,“MainTutorialController”是ViewControllerSettings中的“Storyboard ID”字段

你不能真正的手动,因为UIStoryboardSegue是一个抽象类。 您需要将其子类化并执行perform以使其执行任何操作。 他们真的是要在故事板中创build。 不过,您可以手动推视图控制器,这是一个很好的解决scheme。 lnafziger的回答很好:

 UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil]; UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"]; [self.navigationController pushViewController:theTabBar animated:YES]; 

但有一点需要注意的是,你曾经说过,你想保持好的东西,把它们分开。 故事板的想法是让你在一个地方完成所有的devise工作的时候保持独立。 每个视图控制器都很好,并在故事板内与其他视图控制器分开。 整个想法是把它全部放在一个地方。 只要把它铺好,这样就可以组织起来,你就可以走了。 除非你有充分的理由这么做,否则你不应该把它分开。

你不应该把UITabBarControllers放在UINavigationController中。 这是要求错误,如不正确的自动/视图卸载等,因为苹果不支持这种遏制:

但是,在组合视图控制器时,控制的顺序很重要。 只有某些安排是有效的。 从小孩到家长的遏制顺序如下:

  • 内容视图控制器和具有灵活边界的容器视图控制器(如页面视图控制器)
  • 导航视图控制器
  • 标签栏控制器
  • 分割视图控制器

这是一个很快的版本:

 let targetStoryboardName = "Main" let targetStoryboard = UIStoryboard(name: targetStoryboardName, bundle: nil) if let targetViewController = targetStoryboard.instantiateInitialViewController() { self.navigationController?.pushViewController(targetViewController, animated: true) } 

你有没有尝试以下方法:

2 /单击以select您的视图控制器链接到您的导航控制器,并在顶部菜单:编辑器 – >embedded – >标签栏控制器

注:我没有testing它,因为我使用的是相反的:使标签栏应用程序和把导航控制器里面)。