1

我有一个UIViewController* compViewController 在同一视图的两个副本之间切换(两个视图之间的差异很小)。目前,两个视图都来自同一个 xib 文件。xib 文件包含相同视图层次结构的两个几乎相同的副本。其中一个副本,“主副本”连接到 compViewController 中的视图出口。第二个视图连接到 compViewController 中的 auxView 插座。视图控制器选择显示一个或另一个视图。实际上,这种描述是对实际情况的过度简化。实际上,这两个视图之一作为“overlayView”传递给 UIImagePickerController,该 UIImagePickerController 作为模态控制器被 compViewController 推送。

这种方法被证明是一场维护噩梦,因为对一个视图的任何更改都需要复制到 nib 中的另一个视图上。

我正在考虑的一种可能的解决方案是从 nib 中删除视图层次结构的一个副本,然后加载 nib 两次以获得视图的两个副本。然后在 compViewController 的 viewDidLoad 方法中以编程方式对其中之一进行必要的更改,然后再将其作为叠加层传递给 UIImagePickerController。

我在 NSBundle 的 UIKit 扩展类别中使用 loadNibNamed 方法(我认为这是一个仅限 iPhone 的类别),它需要一个所有者。如果所有者是同一个 ViewController,则生成的对象是同一个对象,即为具有相同所有者的 sam xib 调用 loadNibNamed 两次返回相同的确切实例。我相信我需要两个单独的实例,因为在过去我尝试将 compViewController 使用的视图的相同实例传递给 ImagePicker 并且发生了各种不好的事情。然后我读到,您永远不应该在不同的 UIViewContollers 之间共享 UI 对象,至少不要与都被推入同一个 NavigationController 的 ViewControllers 共享。

我错过了更好的方法吗?

非常感谢您对我的任何建议。

4

1 回答 1

0

我的理解是一个 nib 由 viewController 拥有,并且只能有一个所有者。我离开了 nibs,开始用代码构建一切。一开始它需要做更多的工作,但因为我发现笔尖受到限制,所以它更加可重用和强大。

于 2010-07-22T22:16:26.007 回答