我正在开发一款通用应用。
该应用程序使用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变体的任何提示吗?
(顺便说一下,模拟器通常完全可靠地表现出正确的行为,因此找到这些差异/错误很烦人。)
答案 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 alloc] initWithNibName:@"ExcitingViewController" bundle:nil]
应该可以在两台设备上运行,而无需检查用户界面习惯用法。
中有所涉及