【发布时间】:2011-03-19 17:56:43
【问题描述】:
我有一个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 共享。
我错过了更好的方法吗?
非常感谢您对我的任何建议。
【问题讨论】:
-
你说的“两个视图之间有小的差异”是什么意思?
-
现在我已经将两个视图之间的差异分解到一个单独的 nib 文件中。所以现在这两个视图是相同的,我试图从同一个 nib 文件中加载它们,方法是加载 nib 两次。
标签: iphone uiviewcontroller xib