2012-12-27 64 views
10

我有一个“容器”viewController,它使用storyboard保存几个容器视图。 每个容器视图都有一个指向嵌入式视图控制器视图的链接。在故事板中将UIViewController xib加载到ContainerView中

由于上一个大项目工作IM,事实证明,故事板文件是巨大的,并含有大量的“孩子” viecontrollers查看布局。当少数人需要同时处理这个文件时,这将是一个处理该文件的问题。那对我不好。 我想知道是否加载到每个容器的方式查看viewcontroller的xib文件,并仍在使用故事板。

含义,每个视图控制器创建的.xib文件,而不是抱着他们在故事板本身,并将其链接到故事板的容器意见。

谢谢,

回答

5

是的,你可以。几点意见:

  1. 所有你需要做的就是放入我们在使用NIB时使用的那种代码。在容器的情况下,这意味着the typical container methods。如果您未通过代码进行遏制,请参阅“视图控制器编程指南”中的Creating Custom Container View Controllers底线,当您转换到非故事板场景(或添加非故事板子视图控制器)时,只需在基于NIB的环境中对其进行编码即可。您不能在故事板中表示这个基于NIB的场景。但是你刚才得到的控制器像你总是这样用笔尖:

    SecondViewController *controller = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; 
    
  2. 显然你失去很多的使用故事板的好处(例如大小在父场景的容器视图的基础上孩子的场景),但你并没有比在NIB环境下更糟糕。但在回答你是否可以“将它们链接到故事板中的容器视图”的问题上,你不能在故事板本身中表示这种关系,而是通过编程方式将它们联系起来。

  3. 如果您的单独团队正在单场景环境中工作,则可以使用此NIB方法。不过,你也应该考虑一下,每个逻辑团队都有一个故事板。当你在故事板之间转换时,你仍然不得不诉诸代码,就像你在这个NIB方法中做的那样,但是如果你的一个团队有多个场景来处理,他们可以在他们的项目部分中享受故事板的好处。当你想要去的第一个场景在接下来的故事板,您可以:

    UIStoryboard *secondaryStoryboard = [UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil]; 
    SecondViewController *controller = [secondaryStoryboard instantiateInitialViewController]; 
    
  4. 如果你的孩子需要过渡到你的故事板新的场景,我觉得有用我自己parentStoryboard属性添加到我的孩子控制器,如果您需要执行类似instantiateViewControllerWithIdentifier的操作,它可以很有用。显然,如果你不转换到新的控制器,你可能不需要那样做,但是如果你有,UIStoryboard属性可以是有用的。

+0

谢谢Rob,我以前一直在遏制工作,我试图在这个项目中使用它 - 它工作正常,但我只是想知道是否有办法“享受两个世界”,但它似乎是不可能的。故事板自动将我的childViewControllers作为儿童使用,效果很好。无论如何,你在3,4中写的是非常有趣和生病的尝试。 – Lirik

+0

@LironK是的,我得到你想要做的,但如果你有多个故事板(和/或NIBs),那么你失去了一些故事板的好处。我只是不认为你可以在故事板之间或故事板和NIB之间延续。恐怕你必须在代码中做到这一点。抱歉。 – Rob

12

可以移动您的视图控制器布局到一个单独的厦门国际银行。正如你所说,这是一个非常方便的方式来分享故事板上的布局。

在故事板中设置容器视图时,请确保您删除嵌入式ViewController中提供的视图。将ViewController的自定义类设置为您的类名称。将xib命名为与该类匹配(例如FooViewController.xib,以便在加载FooViewController.m时找到它)。

如果不删除故事板视图控制器布局中的视图,则会看到空改为查看。您的视图控制器中的viewDidLoad方法将不会被调用,因为View是默认的Storyboard视图。

我在iOS 7以前的项目中使用iOS 8的Xcode 6.1。

+0

谢谢!你拯救我的一天! – Cleversou

+1

这应该是正确的答案。从NIB嵌入子视图控制器的故事板专用方法。完善。谢谢。 –