【问题标题】:Two UIViewController, one XIB File两个 UIViewController,一个 XIB 文件
【发布时间】:2012-05-30 05:31:00
【问题描述】:

比方说,我有三个 UIViewController

  • UserFormViewContoller
  • 新用户表单视图控制器:用户表单视图控制器
  • 更新用户表单视图控制器:用户表单视图控制器

因此,NewUserFormViewController 和 UpdateUserFormViewController 视图控制器从其父级继承以共享基本功能。不同的是他们的方法、创建和更新。

这些观点也有很多共同点,几乎都是。 NewUserFormViewController 和 UpdateUserFormViewController 不同的视图组件是执行保存任务(创建或更新)的按钮

是否可以让两个 UIViewController 共享一个 XIB 文件? 比如说 UserFormViewController.xib 然后我做

[[NewUserFormViewController alloc] initWithNibName@"UserFormViewController" bundle:nil];
[[UpdateUserFormViewController alloc] initWithNibName@"UserFormViewController" bundle:nil];

另一个但重要的问题是,当我使用 Interface Builder 编辑 xib 文件时,它在谈论什么所有者的参考网点和 IBActions,NewUserFormViewController 还是 UpdateUserFormViewController? (当我们右键单击占位符 -> 文件所有者时显示 IBActions 和 Outlets)

如果是这样,我将只使用一个 XIB 文件并以编程方式添加其他特定视图组件(最好只有一个 XIB 文件,这样我可以在一个地方进行一些更改,但对两者都有效)

【问题讨论】:

  • 是的,可以为不同的 UIViewController 使用一个 XIB。
  • 是的,这是可能的,但是有什么具体的理由这样做吗?
  • 谢谢,Nuzhat,但请看我的第二个问题。这才是我真正困惑的真正问题
  • 也谢谢你,罗汉。我的问题最后一段提供的原因。 (更易于更新视图、维护等)

标签: iphone objective-c ios4


【解决方案1】:

“文件所有者”只是一个约定,因此 XCode 可以在其检查器中向您显示正确的 IBOutlets 和 IBActions。如果你创建一个泛型(OO 术语:抽象)UserFormViewController (.h, .m, .xib),在 IB 中连接它;然后将其子类化为两个NewUserFormViewControllerUpdateUserFormViewController,它们将毫无问题地从其父类继承其出口和动作。

【讨论】:

  • 谢谢,西里尔。在阅读了您的答案后进行了一些实验,有点找到了我的问题的答案。
  • @Cyrille:我从父控件继承了一个子控制器,但我的父控制器的 IBOutlets 未初始化。所以,我怀疑xib的继承。那么,能否请您告诉我未初始化 Outlets 的原因。
  • 其实子类没有加载父类的xib。有什么原因吗?
  • @Armaan 子类有自己的笔尖吗?如果是这样,那么您需要重新连接所有内容。
  • 是的,孩子有自己的笔尖。您能否详细说明重新连接所有内容是什么意思
【解决方案2】:

@Armaan 我通过调用子类的 alloc init 方法遇到了同样的问题。我通过使用 initWithNibName: 解决了这个问题,并提供了父类的 xib 文件名。

【讨论】:

  • 这将加载父母的xib但不加载孩子的xib
猜你喜欢
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 2015-06-04
  • 2011-05-12
相关资源
最近更新 更多