继续另一个故事板?

是否有可能从一个故事板转移到另一个故事板,或者将一个故事板嵌入到另一个故事板的视图控制器中?我需要把一个 UITabBarController在一个 UINavigationController,我想保持他们漂亮和单独。

55115 次浏览

是的,但是你必须按照程序来做:

// 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];

由于 UIStoryboardSegue 是一个抽象类,所以实际上不能手动执行 segue。您需要对它进行子类化并实现 perform,这样它才能执行任何操作。它们真的应该在故事板中创造出来。但是,您可以手动推动视图控制器,这是一个很好的解决方案。Lnafziger 的回答做得很好:

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

不过,有一点需要注意的是,你曾经说过,你想让事情变得美好和独立。情节串连图板的想法是允许您在一个地方完成所有的设计工作时将事情分开。每个视图控制器都很好,并且在故事板中与其他视图控制器分开。整个想法就是把它们放在一个地方。只要把它摆好,这样就有条理了,你就可以走了。你不应该把它分开,除非你有一个很好的理由这样做。

不应将 UITabBarController 放在 UINavigationController 中。它会出现错误,比如错误的自动旋转/视图卸载等等,就像苹果 不支持这样的控制:

但是,当组合视图控制器时,包含顺序很重要; 只有某些安排是有效的。从子女到父母的遏制顺序如下:

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

你试过以下方法吗:

2/点击选择你的视图控制器,它链接到你的导航控制器,在顶部菜单: 编辑器-> 嵌入在-> 标签栏控制器

注意: 我没有测试它,因为我正在使用相反的东西: 制作标签栏应用程序和把导航控制器放在里面)。

从 Xcode 7开始,您可以通过使用故事板参考来图形化地完成这项工作:

reference

添加故事板引用到你的故事板。在 ViewController 和故事板引用(ctrl + 拖动)之间创建接口

那就填平这片土地。

enter image description here

“教程”在“教程. 故事板”文件的哪里 “ MainTutorialController”是 ViewControllerSettings 中的“ Storyboard ID”字段

下面是一个简短的版本:

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