2010-06-02 4 views
2

У меня есть приложение для iPad, которое я хотел бы сделать Universal, однако это кажется довольно сложным. Я изменил ситуацию, чтобы поддерживать обе сборки, но при создании я получаю много ошибок об использовании UIPopOvers. Вот мои вопросы:Сделать приложение для iPad универсальным приложением

  • Почему UI_USER_INTERFACE_IDIOM() не компилируется или не регистрируется на 3.1.3?
  • Могу ли я условно иметь переменные в определении класса на основе UI_USER_INTERFACE_IDIOM()?
  • Если нет, следует ли использовать два разных контроллера вида?

Спасибо!

ответ

3

Почему UI_USER_INTERFACE_IDIOM() не скомпилировать или зарегистрироваться на 3.1.3?

UI_USER_INTERFACE_IDIOM макрос доступен только начиная с 3.2. Те же ограничения для userInterfaceIdiom объекта UIDevice. Это означает, что вы можете получить универсальное приложение, начиная с SDK 3.2.

Могу ли я условно иметь переменные в определение класса на основе UI_USER_INTERFACE_IDIOM()?

No. UI_USER_INTERFACE_IDIOM макрос - это всего лишь ярлык времени выполнения, чтобы получить текущую идиоматику пользовательского интерфейса устройства.

Если нет, следует ли использовать два разных контрольных контроллера ?

Если у вас есть очень разные интерфейс между двумя устройствами, разумнее использовать два различных контроллеров отображения и создать правильный во время выполнения (в контроллере приложения, например), используя UI_USER_INTERFACE_IDIOM макрос.

+0

Итак, если бы я хотел универсальное приложение, то я строю для 3.2? Я не понимаю, ни iPhone, ни iPod touch не могут работать 3.2, поэтому я не могу использовать 'UI_USER_INTERFACE_IDIOM()' вообще. Должен ли я строить для 3.2 и просто использовать обе настройки сборки руки? Как проверить на устройстве, не работающем на 3.2, например на iPhone? Я не могу заставить вещи компилироваться в 3.1.3 либо потому, что 'UIPopoverController' не распознается под этой версией. –

+0

Да, универсальное приложение доступно только начиная с 3.2. На данный момент ни один iPhone не запускает SDK 3.2, но iPad делает это. Таким образом, разработка универсального приложения предполагает установку базового SDK на 3.2 и установку целевого SDK на 3.1+. Затем вам нужно выполнить проверки времени выполнения, чтобы проверить, доступны ли 3.2 классы или функции. Я рекомендую прочитать Руководство по программированию iPad (http://developer.apple.com/iphone/library/documentation/General/Conceptual/iPadProgrammingGuide/StartingYourProject/StartingYourProject.html), в котором описывается, как создавать универсальные приложения. –

+0

Да, вы должны использовать SDK 3.2 для компиляции 'UI_USER_INTERFACE_IDIOM()', но он работает с 3.1 и ранее. – user102008

2

Мне очень повезло, просто выбрав цель, затем перейдите в Project-> Upgrade current target для iPad.

Мое приложение является довольно простой, состоящий в основном из взглядов таблицы и webviews, но это стоит сделать резервную копию и пытается ...

И да, вы должны представить его как 3.2 приложение, которое может Целевая задача 3.1. *

Существует также много другого материала, который вам нужно сделать: Убедитесь, что его можно просмотреть с любой ориентацией (в первый раз его отклонили). Убедитесь, что у вас созданы все новые изображения. у вас должно быть 3 или 4 значка, а не только одно, как iPhone. (значок iPad, значок iPhone, маленький значок для прожектора и т. д.). И, конечно же, скриншоты размером с iPad для магазина.

Действительно хороший способ, которым я пользуюсь, чтобы проверить, является ли это iPad или iPhone, проверить, может ли устройство использовать контроллер с разделенным представлением, поскольку в обозримом будущем ни одно устройство с экраном размером с iPhone не сможет для использования контроллера разделенного вида.Я только что создал функцию, чтобы сделать это для меня:

+(BOOL)isIpad{ return NSClassFromString(@"UISplitViewController") != nil; } 

Тогда где-нибудь в моем приложении, что я хочу показать что-то другое в зависимости от устройства, я просто сделать чек на него:

int width = 150; 
if([NabAppDelegate isIpad]){ 
    width = 350; 
} else { 
    width = 150; 
} 
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5,10,width,25)]; 

Этот намного лучше, чем проверять версию ОС, как я уже видел.

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