iOS通用应用程序和nibs / xibs

时间:2012-03-02 00:03:19

标签: ios nib ios-universal-app

我正在开发一款通用应用。

该应用程序使用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变体的任何提示吗?

(顺便说一下,模拟器通常完全可靠地表现出正确的行为,因此找到这些差异/错误很烦人。)

3 个答案:

答案 0 :(得分:0)

我在我的项目中所做的是覆盖initWithNibName / initWithCoder / init并检查它是否是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()

答案 1 :(得分:0)

好的,答案似乎确实是你需要以编程方式处理这个问题(如问题中所示),这似乎是苹果公司错过的机会,但也许还有更多的机会。

答案 2 :(得分:0)

对不起,我迟到了,但你尝过类似的事情:

  • ExcitingViewController~iphone.xib
  • ExcitingViewController〜ipad.xib

这应该与设备无关,所以

[[ExcitingViewController alloc] initWithNibName:@"ExcitingViewController" bundle:nil]

应该可以在两台设备上运行,而无需检查用户界面习惯用法。

这在Resource Programming Guide

中有所涉及