Универсальные XIB для iPad / iPhone - Xcode 4

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

Спасибо.


person Sam    schedule 07.06.2011    source источник
comment
Для этого есть опция при создании нового проекта в Xcode.   -  person PengOne    schedule 08.06.2011
comment
@PengOne где? Я создаю проект на основе просмотра.   -  person Sam    schedule 08.06.2011


Ответы (5)


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

person ZYiOS    schedule 03.03.2012

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

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

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

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

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

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

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

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

person Matt    schedule 07.06.2011

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

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

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

self.viewController = [[ViewController alloc] initWithNibName:IS_IPAD?@"ViewController~iPad":@"ViewController" bundle:nil];
person james_womack    schedule 20.03.2012
comment
Макросы традиционно заключаются в ALL_CAPS. - person Richard; 24.07.2013
comment
@ Ричард Это правда. - person james_womack; 31.07.2013

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

person hullahub    schedule 30.06.2011

Если у вас есть существующее приложение, есть опция в Targets -> upgrade для iPad / iPhone.

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

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    //load xib of ipad
}
else
{
    //load xib of iphone
}
person iAmitWagh    schedule 08.06.2011
comment
правильно ли вы загружаете файл xib ... plz chk stackoverflow.com/questions/6290782/ - person iAmitWagh; 15.05.2012