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的主要内容,如果未能解决你的问题,请参考以下文章

制作通用 iOS 应用程序应遵循的初始步骤

选项卡式应用程序中视图控制器的附加 NIB

Xcode 为通用应用程序构建名称后缀不正确的 nib 文件

从情节提要中提取 nibs/xibs (iOS)

在 iOS 上使用下载包中包含的 XIB/NIB 文件

MainWindow.xib nib 文件有啥用?