Универсальные iPad / iPhone XIBs - Xcode 4 - PullRequest
2 голосов
/ 08 июня 2011

Я хочу сделать универсальное приложение, которое имеет два разных файла XIB.Один для iPhone, а другой для iPad.Они используют один и тот же код, просто разные интерфейсы.Как бы я создал «универсальное» приложение?

Спасибо.

Ответы [ 6 ]

6 голосов
/ 03 марта 2012

Просто скопируйте xib-файл, затем переименуйте его в FileName ~ ipad.xib , добавьте его в свой проект, iOS автоматически загрузит правильный xib-файл, ссылающийся на ваше устройство.

5 голосов
/ 08 июня 2011

Для начала (вы говорите, что создаете приложение на основе представления), создайте его на основе представления iPhone или iPad.

Это даст вам приложение applegate, viewcontroller и view (специально для iPad или iPhone, в зависимости от того, какой вариант вы выбрали)

Теперь добавьте еще одну xib, перейдите в File> New File ... посмотрите слева от диалогового окна и выберите «User Interface» в группе iOS. На панели справа выберите «Просмотр» и нажмите «Далее», затем выберите iPad или iPhone (в зависимости от того, что вы выбрали изначально) при создании XIB, выберите его, а затем выберите владельца файлов в левой части главной панели. Затем перейдите в меню «Утилиты» (правая панель) и выберите «Инспектор удостоверений» (значок 3-й опции вверху), измените класс на тот же viewController, который был создан при создании приложения на основе представления. Вы можете связать розетки одинаково в обоих представлениях, но они будут использовать один и тот же viewController.

Чтобы определить, на каком устройстве работает ваше приложение во время выполнения, вы можете использовать соглашение

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

и основывать загрузку представлений на этом виде условного утверждения. Просто для ясности, не забывайте, что вы загружаете перо, используя его имя, чтобы вы могли выбрать перо, относящееся к среде (см. Выше), и фреймворк сделает все остальное.

Имейте в виду, что это никогда не так просто, как вы думаете (если вы никогда не делали этого раньше) Приложения, которые наилучшим образом используют недвижимость iPad, как правило, лучше работают с выделенными представлениями, хотя это, конечно, не всегда дело. Любые динамически добавляемые компоненты экрана должны быть закодированы как таковые с учетом разницы в пространстве экрана.

Это может легко превратиться в эссе, я предлагаю вам немного почитать, проверить исходный код и погрузиться. Вы многому научитесь, просто экспериментируя.

1 голос
/ 05 июня 2012
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
 UIInterfaceOrientation des=self.interfaceOrientation;
 if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) //ipad
 {
    if (des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown)
    {
      //Ipad portarit
    } 
    else
    {
       //ipad landscape
    }
else //iPhone
{
if (des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown)
    {
      //iPhone portarit
    } 
    else
    {
       //iPhone landscape
    }
}
1 голос
/ 20 марта 2012

Создайте макрос примерно так:

#define IS_IPAD ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)

Назовите ваши XIB, чтобы вы могли сделать это:

self.viewController = [[ViewController alloc] initWithNibName:IS_IPAD?@"ViewController~iPad":@"ViewController" bundle:nil];
0 голосов
/ 30 июня 2011

Вы также можете использовать возможности xcode 4. При создании новых проектов есть опция, которая называется «универсальное приложение».Приложения, основанные на этом шаблоне, используют упомянутое разделение.Вы получаете папки для iphone и ipad с представлениями в нем.

0 голосов
/ 08 июня 2011

Если у вас уже есть приложение, есть опция в Цели -> обновление для iPad / iPhone

После этого добавьте код, чтобы проверить, работает ли приложение на iPad или iPhone.

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    //load xib of ipad
}
else
{
    //load xib of iphone
}
...