【问题标题】:Does every .xib file have to have its own .h and .m files?每个 .xib 文件都必须有自己的 .h 和 .m 文件吗?
【发布时间】:2013-10-26 10:05:39
【问题描述】:

我正在研究 iOS 开发,因为我将在几天后开始使用 Web 服务创建一个 iOS 应用程序。虽然我已经阅读并看过很多教程、文档、论坛等等,但我的问题仍然没有答案,或者更确切地说,答案没有明确说明。我希望有一个人可以帮助我。我只是想知道这一点,因为如果每个 .xib 文件都必须有自己的类文件,那么这意味着我会有很多文件。

【问题讨论】:

  • 每个帖子一个问题。

标签: ios objective-c cocoa-touch cocoa xib


【解决方案1】:

答案是否定的,但是当为每个视图控制器使用 nib 文件(而不是作为 nib 文件集合的情节提要)时,您通常会这样做。

nib 文件归档对象图

记住这一点。界面生成器及其创建的 nib 文件用于创建对象图。您实际上可以在 nib 中抛出任意对象,并在运行时加载它们。当我刚开始时,这是最令人困惑的话题之一。

xib 文件(我仍然称它们为 nib)只是对您可以直观地构建的对象图的描述。基本上,您在 nib 中设置的每个对象都已存档,并且在运行时未存档。您在界面生成器中选择的设置也被归档,相当于在代码中调用方法。

例如,在 nib 中为 UIView 选择背景颜色与在代码中发送 setBackgroundColor: 相同。调整视图的大小就像发送 setFrame: 等。这些都是在构建时归档的,在运行时取消归档。

nib 文件保留对您子类化的对象的引用。

如果您有自定义视图,您将拥有该视图的子类(.h 和 .m)并将其设置在 nib 中。除非你当然不希望视图做任何事情。

通常,当您创建 nib 文件时,无论如何,在 iOS 上,您都会选择为视图控制器子类获取 .h 和 .m 文件。这最终连接到 nib 中的文件所有者代理对象。以 UIView 为例,当您为视图创建子类时,在界面生成器中设置它会为您提供对该代码的引用。然后,您可以在 nib 中设置其大小、背景颜色、绘图选项等,以及它在代码中实际绘制的内容。

这是一篇来自苹果的关于笔尖的详细文章:

https://developer.apple.com/library/ios/documentation/cocoa/conceptual/LoadingResources/CocoaNibs/CocoaNibs.html

【讨论】:

  • 您好,先生。感谢您提供非常详细的答案。先生,既然您似乎知道这件事,那我不妨再问一个问题。一个 nib 文件可以有多个视图吗?例如,一个带有 .h 和 .m 的 loginViewController,它有它的第一个视图,用户登录的位置,以及其他视图,用户将根据他或她的登录方式被重定向,比方说,欢迎和登录错误意见。是否可以在一个 nib 文件 ala 故事板中拥有三个视图,全部归 loginViewController 所有?
  • 还有一个问题,在一个简单的 5 种用户登录的 Web 服务程序中,从 Web 服务获取数据,哪种方法更好?故事板还是单一视图程序?
  • 是的,一个 nib 文件可以有多个视图,虽然我从来没有做过设置(或需要)有两个视图到一个视图控制器,除了使用视图控制器包含 API (我认为)iOS 5 附带。另外,您可能会使用 UIAlertView,而不是错误消息视图。在 iOS 7 中,他们添加了将您自己的自定义视图添加到 UIAlertView 的功能,但我怀疑您是否需要它来显示错误消息。您可能应该停止将您的工作视为 .h 和 .m 文件,而是开始考虑您正在使用哪些对象,以及您希望如何组合它们。
  • 关于第二条评论,我不确定您所说的单视图程序是什么意思。您可以使用情节提要或单个笔尖来完成此操作。故事板将帮助您布局视图控制器之间的过渡。 (故事板中的 VC 顺便称为场景)。
【解决方案2】:

Xib 文件可以包含任何类型的序列化资源——数组、字典,而不仅仅是视图和视图控制器。所以 xib 文件不能有 *.h *.m 文件

【讨论】:

    【解决方案3】:

    XIB 文件是内容存档,可以由视图控制器和视图组成。一般来说,“内置”视图控制器在您对它们进行子类化之前并没有多大用处,因此如果 XIB 包含视图控制器,那么您通常会有关联的 .h/.m 文件。但 XIB 可能只包含视图。在这种情况下,您可能没有关联文件(但很有可能您应该有一个视图子类,因为您的视图可能希望有一些子视图的出口)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 2014-04-30
      相关资源
      最近更新 更多