【问题标题】:What are the rules for filename matching initWithNibName?文件名匹配 initWithNibName 的规则是什么?
【发布时间】:2012-05-16 00:17:02
【问题描述】:

iOS 上的 initWithNibName 很聪明:它会自动为 iPad 而不是 iPhone 加载不同的 NIB(虽然很多人不知道这一点 - 它没有记录在 UIViewController.initWithNibName 中!)。

但它还能做什么?我为此找到的唯一 Apple 文档解释说:

  1. 它将查找并查找名称末尾带有 ~ipad 或 ~iphone 的文件
  2. Apple暗示它遵循自动图像文件名匹配的规则

但是没有指向图像匹配规则的链接,我也找不到任何明确的文档:(。

规则可能包括:“如果您将@2x 放在文件名的末尾,您将获得不同的视网膜 NIB”(我不知道这是否有效)。

我真正在寻找的是使用了哪些规则的列表。如果我可以更多地使用它们的智能名称匹配(例如,如果它们有“加载横向 nib 与加载纵向 nib”),它将节省大量的硬编码 - 在我编写的几乎每个应用程序中重复 -

【问题讨论】:

  • 好问题!我什至不知道~iphone~ipad 匹配,因为Apple 似乎没有在他们自己的模板代码中使用它!我会看这个问题的!

标签: ios uiviewcontroller xib


【解决方案1】:

为了回答您的(主要)问题,这些是initWithNibName 中文件名匹配的规则:

...但是,如果您不指定 nib 名称,并且不覆盖 自定义子类中的 loadView 方法,视图控制器搜索 对于使用其他方式的 nib 文件。具体来说,它会寻找笔尖 具有适当名称(不带 .nib 扩展名)的文件并加载 每当请求其视图时,该 nib 文件。具体来说,看起来 (按顺序)具有以下名称之一的 nib 文件:

  1. 如果视图控制器类名称以单词“Controller”结尾,如在 MyViewController 中,它会查找名称与 没有单词“Controller”的类名,如 MyView.nib。
  2. 它查找名称与视图名称匹配的 nib 文件 控制器类。例如,如果类名是 MyViewController,它会查找 MyViewController.nib 文件。

来自 UIViewController 的 nibName

下的文档

但还有更多...实际上NSBundle 有一些非常聪明的规则来定位其中的资源。 Here is the documentation page describing these rules (请参阅:iOS 中的设备特定资源)。

这给我们带来了to this page,它描述了可以应用于捆绑资源的所有修饰符(和基本模式)(我相信这是你提到的关于图像文件名匹配的链接)。

【讨论】:

  • 所以...阅读这些链接...对于 NIB 文件没有特定规则?它们继承了所有资源的“基本”规则(链接 1),但没有其他规则(链接 2) - 对吗?
  • 是的,这是正确的。我可以添加的另一件事是smart 基于本地化加载 nib 文件。由于这是一个非常有趣的话题,因此非常欢迎任何可以添加更多信息的人。
猜你喜欢
  • 2016-06-23
  • 2017-05-20
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
相关资源
最近更新 更多