Как создать универсальное приложение для iPhone / iPad, которое программно использует UISplitViewController и UINavigationController?

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

Должен ли я настроить свой основной файл для использования другого делегата приложения или я использую тот же делегат приложения и в нем условно настроен пользовательский интерфейс?

Кроме того, всякий раз, когда я пытаюсь скомпилировать свое приложение на симуляторе, оно не распознает UISplitViewController или даже условие, в котором я проверяю, существует ли класс.

Может, кто-нибудь направит меня в правильное русло, помня, что я не использую никакие xibs?


person Arash Parnia    schedule 09.05.2010    source источник


Ответы (1)


Если вы хотите увидеть пример полностью программного интерфейса iPhone / iPad, в котором используется разделенное представление, вы можете загрузить исходный код моего приложения Молекулы.

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

Опять же, я рекомендую посмотреть этот проект приложения, чтобы увидеть, как я это настраиваю программно. Код доступен по лицензии BSD, поэтому вы можете скопировать и вставить его в свое собственное приложение, если хотите.

Что касается ошибок компиляции, которые вы получаете, вам нужно будет перенести цель вашего приложения в универсальное приложение, используя опцию меню «Обновить текущую цель для iPad». Как только это будет завершено, установите SDK сборки на 3.2. Перейдите к настройкам сборки вашего приложения и установите для параметра Deployment Target самую раннюю ОС, которую вы хотите поддерживать своим приложением (3.0 - это самая дальняя точка, на которую вы можете пойти).

Наконец, вам нужно будет установить слабую ссылку на UIKit. О том, как это сделать, см. В моем ответе здесь. Слабое связывание фреймворков больше не требуется, если вы строите с использованием iOS 4.2 или более поздней версии SDK. Просто проверьте наличие соответствующих классов во время выполнения, проверив, возвращает ли их +class метод nil.

person Brad Larson    schedule 09.05.2010
comment
Большое спасибо, исходный код молекул действительно помог мне понять все это. Я использую вид сбоку раздельного представления для своего табличного представления, которое разделяет мое существующее табличное представление о приложении iphone, а подробное представление splitview теперь состоит из двух других представлений и используется для доступа к контроллеру навигации. кстати, мне нравится видеть пи на ipad в кубе. - person Arash Parnia; 10.05.2010
comment
Я также использовал [[UIApplication sharedApplication] .delegate performSelector: @selector (PushMyViewController)]; чтобы подтолкнуть ViewController к моему правому обзору ... это хорошо или плохо? я боюсь, что что-то ужасное может случиться позже, лол - person Arash Parnia; 14.05.2010
comment
Спасибо за предоставленный источник Molecules! Когда я использую Active SDK = Simulator 3.2, я могу запустить симулятор iPad. Но как протестировать это приложение на симуляторе в режиме iPhone? Когда я пытаюсь установить Active SDK = Simulator 3.1.3, я получаю несколько ошибок компиляции (например, не могу найти объявление протокола UISplitViewControllerDelegate). Что я делаю неправильно? Спасибо! - person Clint Harris; 11.06.2010
comment
@Clint Harris - Используя SDK 3.2, нет возможности создать целевую версию iPhone в качестве устройства в симуляторе с исходным кодом, как я его настроил. Если вы получите 4.0 SDK, вы можете установить базовый SDK на 4.0 (и удалить все ссылки, которые у меня есть на базовый SDK в настройках целевой сборки) и иметь возможность настроить таргетинг на iPhone или iPad в симуляторе. - person Brad Larson; 12.06.2010