iOS 通用应用程序和 nibs / xibs
Posted
技术标签:
【中文标题】iOS 通用应用程序和 nibs / xibs【英文标题】:iOS Universal apps, and nibs / xibs 【发布时间】:2012-03-02 00:03:19 【问题描述】:我正在开发一个通用应用程序。
该应用使用 NIB,例如,我有
ExcitingViewController.xib
ExcitingViewController~iPad.xib
在 iPhone 或 iPad 模拟器上,会自动选择适当的变体(即在 iPad 上选择带有 ~iPad 后缀的变体,无需任何代码更改)。
但是,在真正的 iPad 上,总是使用 iPhone 变体。
我看到有人提到以编程方式选择合适的 NIB,但由于这是在模拟器上自动处理的,我不明白为什么它不能在真正的设备上。
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
excitingViewController = [[ExcitingViewController alloc] initWithNibName:@"ExcitingViewController" bundle:nil];
else
excitingViewController = [[ExcitingViewController alloc] initWithNibName:@"ExcitingViewController~iPad" bundle:nil];
有关在真实设备上自动选择 ~iPad 变体的任何提示?
(顺便说一句,模拟器通常完全可靠地显示出正确的行为,因此发现这些差异/错误很烦人)。
【问题讨论】:
【参考方案1】:我在我的项目中所做的是覆盖 initWithNibName/initWithCoder/init 并检查它是否是 iPad,如果是则加载适当的 iPad。
我的 pch 中有一个宏用于 iPad 检查:
// iPad detection
#ifdef UI_USER_INTERFACE_IDIOM
#define IS_IPAD() (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#else
#define IS_IPAD() (false)
#endif
然后我只需要在我的代码中使用 IS_IPAD()
【讨论】:
【参考方案2】:好的,答案似乎是您需要以编程方式处理此问题(如问题所示),这似乎是 Apple 错失的机会,但也许还有更多。
【讨论】:
【参考方案3】:对不起,我迟到了,但你有没有尝试过:
ExcitingViewController~iphone.xib ExcitingViewController~ipad.xib这应该与设备无关
[[ExcitingViewController alloc] initWithNibName:@"ExcitingViewController" bundle:nil]
应该在两种设备上都可以工作,而无需检查用户界面习惯用法。
这在Resource Programming Guide 中有所涵盖。
【讨论】:
以上是关于iOS 通用应用程序和 nibs / xibs的主要内容,如果未能解决你的问题,请参考以下文章