猜到另一个故事板?

时间:2012-03-05 23:28:45

标签: ios xcode cocoa-touch ios5 uistoryboard

是否可以从一个故事板转到另一个故事板,或者将故事板嵌入到另一个故事板中的视图控制器中?我需要在UITabBarController中放置一个UINavigationController,我想让它们保持良好和分离。

6 个答案:

答案 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开始,您可以使用故事板参考:

以图形方式执行此操作

reference

将故事板参考添加到故事板。在ViewController和Storyboard Reference(ctrl + drag)之间创建segue

然后填写这些字段。

enter image description here

其中“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 /单击以选择链接到导航控制器的视图控制器,并在顶部菜单中:编辑器 - >嵌入 - >标签栏控制器

注意:我没有测试它,因为我正在使用相反的方法:制作标签栏应用程序并将导航控制器放在里面。

相关问题