文件名匹配initWithNibName的规则是什么?

时间:2012-05-07 13:27:56

标签: ios uiviewcontroller xib

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

但它还能做些什么呢?我发现的唯一的Apple文档解释了:

  1. 它将在名称的末尾用~ipad或~iphone查找和查找文件
  2. Apple 暗示它遵循自动图像文件名匹配的规则
  3. 但是没有与图像匹配规则的链接,我也找不到任何明确的文档:(。

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

    我真正想要的是列出了使用的规则。如果我可以更多地使用他们的智能名称匹配(例如,如果他们有“加载风景笔尖与加载肖像笔尖”),它将节省大量硬编码 - 在我写的几乎每个应用程序中重复 -

1 个答案:

答案 0 :(得分:2)

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

  

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

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

    来自UIViewController的 nibName

    下的文档

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

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