您可以使用设备修改器(即~ipo)在Info.plist中提供设备特定的密钥,并指定特定于设备的启动图像(适用于iPhone的Default.png和默认的~ipad.png) iPad,例如)。 Apple Docs中特别提到了这两件事,但他们并未说这适用于任何其他类型的文件。
我发现(非常偶然)这适用于通过initWithNibName:bundle:
加载.xib文件。例如,我可以使用MyView.xib和MyView~ipo.xib,以及此代码:
MyViewController *viewController = [[MyViewController alloc]
initWithNibName:@"MyView" bundle:nil];
...将在iPad上完全加载MyView~ipo.xib,在其他设备上加载MyView.xib。
所以,1)这是在某处记录的吗?我肯定找不到任何Apple文档。它肯定比检查UI_USER_INTERFACE_IDIOM()并在任何地方硬编码两个不同的笔尖名称更容易,但如果没有记录,我有点不相信它。
并且,2)有谁知道这个iOS开始工作的版本是什么?我只在4.2中试过它,它在那里工作。一般来说,设备修改器(即使是上面列出的文档内容)也是4.0最小值。
答案 0 :(得分:50)
我有同样的问题。答案一开始没有意义,但好消息是它很容易做到! :)
只需在没有任何修改器的情况下为您的iPad xib命名,并使用~iphone修饰符指定您的iPhone xib,它就会正确选择它们。
因此,使用MyViewController,您将获得iPad的MyViewController.xib
和iPhone的MyViewController~iphone.xib
。然后你可以用简单的alloc / init来初始化你的视图控制器。
[[MyViewController alloc] init]
它会抓住正确的xib。
所以,当我在XCode中创建一个新的视图控制器时,我总是选择用于为ipad格式化它的框,因为它将创建的xib将命名为MyViewController.xib,你希望那个是iPad大小的xib。然后我创建了第二个xib,为iPhone格式化,并使用~iphone修饰符命名。
文档有时会有点矛盾,但本页讨论了带有标识符的资源如何默认为iPad。
查看有关使用高分辨率图像的部分。我知道我们正在谈论xib而不是图像,但它确实有效。我的最后6个应用程序都使用了这个成语。
答案 1 :(得分:25)
实际上,它在文档中明确定义,但作为脚注。
在“使用NSBundle加载NIB文件”底部的注释中:
注意:如果你正在开发一个 适用于iOS的通用应用程序,您可以 使用特定于设备的命名 约定加载正确的笔尖 底层设备的文件 自动。欲获得更多信息 关于如何命名你的nib文件,请参阅 “iOS支持特定于设备 资源“。
指向Cocoa Conceptual LoadingResources
的链接但是,是的,这是4.0+唯一的功能。
答案 2 :(得分:3)
我讨厌那个人并回答我自己的问题,但我认为答案是:
1)没有,没有明确记录在任何Apple文档中,以及
2)4.0及更高版本(基于我自己的测试)
您真正保存的是几行代码检查UI_USER_INTERACE_IDIOM()。不过,我会接受它。代码越少,代码越少。
答案 3 :(得分:2)
在iOS 3.2及更高版本中使用的适当技术是UI_USER_INTERFACE_IDIOM()
功能。我通常使用三元运算符来使用适当的XIB初始化UIViewController
。
UIViewController* controller = [[UIViewController alloc]
initWithNibName:UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ?
@"YourViewController-iPad" : @"YourViewController" andBundle:nil];