【问题标题】:UIViewController XIB in iOS framework or dependent projectiOS框架或依赖项目中的UIViewController XIB
【发布时间】:2012-02-04 13:35:21
【问题描述】:

我知道这类问题以前曾被讨论过,但我还没有找到一个明确的答案来解决我目前面临的问题。这就是在库中,如何最好地发布具有复杂视图的 UIViewController 子类

我能看到的方法有:

  1. 同时发布 XIB 并要求您的代码的用户将其添加到他们的项目中。我认为这是不可取的,因为它使维护成为一场噩梦。如果将视图控制器添加到库项目中,则必须将新的 XIB 添加到每个使用该库的项目中。

  2. loadView / viewDidLoad 中创建您的视图,并在其中手动完成所有操作。尽管对于复杂的视图层次结构,这可能非常复杂。

  3. 以某种方式在编译时从您的 XIB 生成您的 loadView 代码。不过,要获得可以正确执行此操作的东西听起来很复杂。

我不太明白 Apple 是如何做到的。以MessageUI 框架为例,MFMailComposeViewController 是一个非常复杂的视图,但它没有 XIB(或者至少我不知道 - 也许真的有?)。我很想知道 Apple 是如何做到的——有人知道吗?

【问题讨论】:

  • Apple 将 IB 用于某些事情,但他们拥有的任何 UI 代码都已经被编译并在设备上。无需将其包含在开发套件中,因为无论如何您都无法更改设备上的内容。 MessageUI 的 UI 实际上相当简单。如果他们确实为此使用了笔尖,它可能与邮件共享,但为此,他们可能只是在代码中创建它。
  • 这不是那么简单。我将按照我在 SDK 附带的 MessageUI 二进制文件中看到的内容进行说明。我可以看到它有一个名为 initWithComposition: 的方法,这有点令人困惑,因为我不太清楚是什么在调用它。
  • 不,我现在明白了。还有另一个控制器对象和一个视图似乎可以完成该视图的繁重工作。所以,是的,他们基本上都是在代码中完成的。

标签: ios uiviewcontroller xib


【解决方案1】:

他们从头开始手动编写所有代码,在我看来,这是最好的选择。有时 InterfaceBuilder 可以通过应用未知/错误记录的设置等来真正劫持您的项目,而且代码的可移植性较差。例如,具有非官方 Linux 工具链的人可能无法在没有 Interface Builder 的情况下使用该库。代码必须由开发人员编写,能够使用适当但极简的工具链(编译器+汇编器+链接器)进行编译,而不依赖于任何不严格属于自己的编程部分的 IDE、SDK 或其他技术项目。

【讨论】:

  • 这是一个公平的观点,我知道你从那个地方来了。我想我还没有真正开始尝试使用loadView,还没有看到它使代码变得多么冗长。
猜你喜欢
  • 2014-05-28
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
  • 1970-01-01
  • 2010-09-05
  • 2015-01-19
  • 2014-01-22
相关资源
最近更新 更多