iOS универсальные приложения и перья - PullRequest
0 голосов
/ 02 марта 2012

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

Приложение использует 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 голосов
/ 10 марта 2012

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

0 голосов
/ 22 июня 2013

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

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

Это не должно зависеть от устройства, поэтому

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

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

Это как-то описано в Руководство по программированию ресурсов.

0 голосов
/ 02 марта 2012

Что я сделал в своих проектах, так это переопределил 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 () в своем коде, где это необходимо

...