12

我有一个“容器”视图控制器,它使用故事板保存一些容器视图。每个容器视图都有一个到嵌入式视图控制器视图的链接。

由于我正在从事一个大项目,事实证明情节提要文件很大,并且包含许多“子” viecontrollers 视图布局。当需要几个人同时处理该文件时,处理该文件将是一个问题。这对我不利。我想知道是否有办法将视图控制器的 xib 文件加载到每个容器视图中,并且仍在使用情节提要。

意思是,为每个视图控制器创建 .xib 文件,而不是将它们保存在情节提要本身中,并将它们链接到情节提要中的容器视图。

谢谢,

4

2 回答 2

16

可以将视图控制器布局移动到单独的 xib 中。正如您所说,这是跨故事板共享布局的一种非常方便的方式。

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

如果您不删除情节提要视图控制器布局中的视图,您将看到该空视图。viewDidLoad不会调用视图控制器中的方法,因为视图是默认的故事板视图。

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

于 2014-12-14T18:21:08.543 回答
5

是的你可以。几点观察:

  1. 您需要做的就是输入我们在使用 NIB 时使用的那种代码。在容器的情况下,这意味着典型的容器方法。如果您尚未通过代码完成遏制,请参阅View Controller Programming Guide中的创建自定义容器视图控制器。底线,当您过渡到非故事板场景(或添加非故事板子视图控制器)时,只需像在基于 NIB 的环境中习惯的那样对其进行编码。您不能在情节提要中表示此基于 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属性会很有用。

于 2012-12-27T15:16:54.170 回答