繁体   English   中英

iOS通用应用和笔尖/ XIB

[英]iOS Universal apps, and nibs / xibs

我有一个通用的应用程序正在开发中。

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

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

抱歉,我参加聚会很晚,但是您尝试过以下方法:

  • 令人兴奋的ViewController〜iphone.xib
  • 令人兴奋的ViewController〜ipad.xib

这应该与设备无关

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

应该在两种设备上都可以工作,而不必检查用户界面习惯用法。

资源编程指南中对此进行了介绍。

我在项目中所做的是重写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()

好的,答案似乎确实是您需要以编程方式处理此问题(如问题中所示),这似乎是Apple错失的机会,但也许还有更多机会。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM