2012-03-02 2 views
0

У меня есть универсальное приложение в разработке.iOS Универсальные приложения и nibs/xibs

Приложение использует крупку, и у меня есть, например,

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

ОК, ответ, похоже, что вам нужно для обработки этого программного обеспечения (как показано в вопросе), который кажется упущенной возможностью Apple, но, возможно, для этого есть еще больше.

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() в моем коде, где это необходимо

0

Извините, я опоздал на вечеринку, но вы пытались что-то вроде:

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

Это должно быть устройство агностик так

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

должен работать на обоих устройствах без необходимости проверять t он идиома интерфейса пользователя.

Это своего рода покрытие в Resource Programming Guide.

Смежные вопросы