【问题标题】:Loading a xib (nib) file twice to obtain two different instances of a view两次加载 xib (nib) 文件以获得视图的两个不同实例
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    相关资源
    最近更新 更多