我有一个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 共享。
我错过了更好的方法吗?
非常感谢您对我的任何建议。