Ios 转到另一个故事板?

Ios 转到另一个故事板?,ios,xcode,cocoa-touch,ios5,uistoryboard,Ios,Xcode,Cocoa Touch,Ios5,Uistoryboard,是否可以从一个情节提要切换到另一个情节提要,或者将情节提要嵌入到另一个情节提要的视图控制器中?我需要在UINavigationController中放置一个uitabarcontroller,我希望它们保持良好的独立性。是的,但您必须以编程方式执行: // Get the storyboard named secondStoryBoard from the main bundle: UIStoryboard *secondStoryBoard = [UIStoryboard storyboard

是否可以从一个情节提要切换到另一个情节提要,或者将情节提要嵌入到另一个情节提要的视图控制器中?我需要在
UINavigationController
中放置一个
uitabarcontroller
,我希望它们保持良好的独立性。

是的,但您必须以编程方式执行:

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

您不能手动执行segue,因为UIStoryboardSegue是一个抽象类。您需要对它进行子类化并实现
perform
,以便它执行任何操作。它们真的应该在故事板中创建。不过,您可以手动推送视图控制器,这是一个很好的解决方案。lnafziger的回答很好地说明了这一点:

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

但有一件事需要注意,那就是你说过你想把事情保持好和分开。故事板的理念是让你在一个地方完成所有设计工作的同时,将事情分开。每个视图控制器都很好,并且在故事板中与其他视图控制器分开。整个想法是把它放在一个地方。只要把它布置得井井有条,你就可以走了。除非有很好的理由,否则不应将其分开。

不应将UIDABBARCONTROLLERS放置在UINavigationController中。它要求出现错误,如不正确的自动旋转/视图卸载等,因为苹果公司采用了这种遏制措施:

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

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

您是否尝试过以下方法:

2/单击以选择链接到导航控制器的视图控制器,并在顶部菜单中选择:编辑器->嵌入->选项卡栏控制器


注意:我没有测试它,因为我使用的是相反的方法:制作选项卡式工具栏应用程序并在其中放置导航控制器。

从Xcode 7开始,您可以使用故事板引用以图形方式执行此操作:

将情节提要引用添加到情节提要。在ViewController和情节提要引用之间创建分段(ctrl+拖动)

然后填写这个字段

其中“Tutorial”是“Tutorial.storyboard”文件
“Main TutorialController”是ViewControllerSettings中的“情节提要ID”字段

这是一个swift版本:

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


合并故事板的效果不太好,因此在多开发人员环境中,使用单独的故事板可能会很有趣。此外,在一个故事板的大型项目中,性能可能会非常差。我们使用多个故事板,但关键是你不能真正做到这一点,并在它们之间进行切换。苹果设计它是为了让你可以在一个地方做任何事情,所以这个想法有点像只使用一个(并不是说你不能)。性能不应该成为问题。故事板被编译为每个视图控制器的独立nib文件。你应该从故事板中获得非常好的表现。性能将和每个视图控制器都有单独的XIB一样好。。。苹果目前对情节串连板编辑器的实现很弱。在2014年Mac Pro上打开一个60场景的情节串连板需要13秒。我已经建立了一个雷达。我真的很想把故事板分开;它们已经太杂乱了。就像书中的章节一样,我认为需要多个故事板。当有多个开发人员在同一个应用程序上工作时,拥有多个故事板非常有用,因为解决故事板xml中的版本控制冲突有时非常痛苦。在iOS 9和Xcode 7中,现在支持跨情节提要引用。:-)请看milczi的答案,您现在可以在UI中非常轻松地执行此操作!我完全同意,原因有很多。将TabBarController放在NavigationController中不是一个好主意,因为代理无法正确激发其中包含的视图,最终用户在导航界面时会有很糟糕的时间。他们很难回到TabBar/导航界面之外的控制器。另一种方法是OK,TabBarController中的NavigationController。最好不要把用户和最终用户搞混,听听苹果的建议!然而,本机iPhone音乐应用程序确实做到了这一点(“正在播放”部分)。仅供参考:iPhone音乐应用程序在“正在播放”屏幕中没有TabbarController。看看这个回答,这是一个很棒的问题。对于基于团队的项目来说,拥有一个故事板是一场噩梦。我们经常通过“流”将项目分成故事板(一个用于登录的故事板,一个用于新闻提要和相关屏幕的故事板,等等)。它有助于最大限度地减少合并冲突的数量,否则每次开发人员接触情节提要时都会发生合并冲突。@BrianSachetta您还做什么?还有其他类似的好建议可以分享吗?这取决于你的团队结构。如果您真的愿意,可以将所有用户界面放在单独的.xib文件中。这就是故事板出现之前的情况。这种方法有优点也有缺点。这样做的好处是,您几乎不会在项目中与其他开发人员发生冲突。缺点是很难直观地看到应用程序流。信息不错,但是问题被标记为ios5,因此这不适用。@Inafziger是的,但这个问题会显示在使用iOS 9的用户的搜索结果顶部。这从XCode 7开始提供。看到更多的信息在这个工作,但我也需要保持导航栏,它显示没有导航栏,有没有办法保持一个导航和按钮,以移动它回到历史上,不管它来自什么故事板?这是我在iOS 10工作。我注意到,我需要一个故事板参考每个segue和