iOS:使用设备修饰符加载xib文件?

zpa*_*ack 49 iphone cocoa-touch objective-c ipad ios

您可以使用设备修改器(即~ipad)在Info.plist中提供设备特定的密钥,并指定特定于设备的启动图像(iPhone的Default.png和iPad的Default~ipad.png,例).Apple Docs中特别提到了这两件事,但他们并未说这适用于任何其他类型的文件.

我发现(非常偶然)这适用于通过加载.xib文件initWithNibName:bundle:.例如,我可以使用MyView.xib和MyView~ipad.xib,以及此代码:

MyViewController *viewController = [[MyViewController alloc] 
                                     initWithNibName:@"MyView" bundle:nil];
Run Code Online (Sandbox Code Playgroud)

...将在iPad上完全加载MyView~ipo.xib,在其他设备上加载MyView.xib.

那么,1)这是在某处记录的吗?我肯定找不到任何Apple文档.它确实比检查UI_USER_INTERFACE_IDIOM()并在任何地方硬编码两个不同的笔尖名称更容易,但如果没有记录,我有点不相信它.

并且,2)有谁知道这个iOS开始工作的版本是什么?我只在4.2中试过它,它在那里工作.一般的设备修饰符(即使是上面列出的文档内容)也只有4.0.

Ken*_*and 50

我有同样的问题.答案一开始没有意义,但好消息是它很容易做到!:)

只需在没有任何修饰符的情况下命名您的iPad xib,并使用~iphone修饰符指定您的iPhone xib,它就会正确选择它们.

因此,使用MyViewController,您将拥有MyViewController.xibiPad和MyViewController~iphone.xibiPhone.然后你可以用简单的alloc/init初始化你的视图控制器.

[[MyViewController alloc] init] 它会抓住正确的xib.

所以,当我在XCode中创建一个新的视图控制器时,我总是选择用于为ipad格式化它的框,因为它将创建的xib将命名为MyViewController.xib,你希望那个是iPad大小的xib.然后我创建了第二个xib,格式化为iPhone并使用~iphone修饰符命名.

文档有时会有些矛盾,但是这个页面讨论了带有标识符的资源如何默认为iPad.

ImageSoundResources

查看有关使用高分辨率图像的部分.我知道我们正在谈论xib而不是图像,但它确实有效.我的最后6个应用程序都使用了这个成语.


小智 25

实际上,它在文档中明确定义,但作为脚注.

CocoaNibs

在"使用NSBundle加载NIB文件"底部的注释中:

注意:如果要为iOS开发通用应用程序,则可以使用特定于设备的命名约定自动为基础设备加载正确的nib文件.有关如何命名nib文件的详细信息,请参阅"iOS支持特定于设备的资源".

链接到Cocoa Conceptual LoadingResources

但是,是的,这是4.0+唯一的功能.