Как я могу присоединиться к приложению для iPad и iPhone? - PullRequest
2 голосов
/ 02 августа 2011

У меня есть приложение для iPad и приложение для iPhone.

Я хотел бы присоединиться к ним, чтобы, если приложение присоединения запускалось на iPad, оно имело поведение, а если оно работало на iPhone, оно имелоесть другое.

Первое, что я подумал, было сделать разные виды и выбрать вид для iphone / ipad, но у меня также есть некоторые вещи, специфичные для ipad и iphone (пример: splitViewController), поэтому выбираю толькодругое мнение не поможет.

Как лучше всего объединить 2 таких приложения?Я хотел бы более элегантный метод, чем делать что-то вроде

if(isIPhone)
{
// code for iphone

}
else if(isIPad)
{
// code for iPad

}

каждый раз, когда у меня есть разница между двумя версиями.Спасибо!

Ответы [ 6 ]

5 голосов
/ 02 августа 2011

Я полагаю, что видео сессий WWDC 2010 включает обзор развития iPad, который охватывает именно эту проблему.

Вот подход, который я выбрал, согласно руководству Apple:

Вы можете установитьспецифичные для платформы основные интерфейсы, что означает, что вы также можете устанавливать специфичные для платформы делегаты приложения .Так что, возможно, у вас есть делегат приложения суперкласса, который выполняет всю настройку вашего приложения, а затем подклассы для развертывания интерфейса iPad или iPhone.

Это полезно, поскольку на iPad для разделенных представлений нужен полицейский дляопределить, какой контент идет куда.Теперь у вас есть возможность поместить эту логику независимо от контроллеров представления: в делегате приложения.

Оттуда в любое время появляется контроллер представления, который является общим для обеих платформ, но имеет определенное поведение длякаждый, суперкласс контроллера представления создан, который обрабатывает все общие функциональные возможности.Специфичный для iPad подкласс может затем переопределить метод -refreshView: для создания дополнительной анимации или для добавления свойств и методов делегирования для поддержки разделенных видов.

Хотя вы можете определенно проверить iPad-ность с помощью if elseэто может привести к действительно грубости в контроллере представления, поскольку вы добавляете методы делегата, которые имеют значение только на одной платформе.Разделив его таким образом, вы получите код, который намного проще поддерживать и читать.Все это может означать много рефакторинга существующего проекта.В моем случае, однако, это заняло около часа, и в результате получилось очень аккуратное приложение, в которое легко перейти и изменить его для одной или обеих платформ.

2 голосов
/ 02 августа 2011

То, что вы ищете, это:

if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
    // Do iPad specific stuff.
} else {
    // Do iPhone/iPod touch stuff here.
}
1 голос
/ 02 августа 2011

По крайней мере, в XCode 4 вы можете указать, какой код вы хотите, чтобы каждая цель компилировала, и полностью игнорировать остальные. Таким образом, теоретически вы можете скопировать все свое приложение для iPad в приложение для iPhone, а затем убедиться, что каждое из них ссылается только на свои ресурсы и код. Единственная проблема, с которой вы можете столкнуться - это конфликт имен, но вы можете обойти это, используя группы и папки.

Это кажется самым простым способом, так как вы уже построили оба. Недостаток этого метода в том, что вам все равно придется исправлять ошибки в коде отдельно, но ваши пользователи смогут использовать одно и то же приложение на своих iPhone и iPad.

EDIT:

См. BUILD_PHASES > COPY_BUNDLE_RESOURCES & BUILD_PHASES > COMPILE SOURCES

0 голосов
/ 02 августа 2011

Это очень просто.

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

    // Do iPad stuff

    } else {

    // Do iPhone stuff

    }

Но будьте осторожны при загрузке имен пера в условиях. Надеюсь, вы знаете, что вам нужно разрабатывать .xib для iPad и iPhone отдельно.

0 голосов
/ 02 августа 2011

Вы, вероятно, можете попробовать превратить его в универсальное приложение в xCode 4. Вот ссылка на краткое введение, которое помогло мне в создании универсального приложения.

Универсальные приложения

0 голосов
/ 02 августа 2011

Разве вы не можете просто объединить файлы в одном приложении?Как вы копируете все исходные файлы из приложения ipad в проект приложения iphones (возможно, вам придется переименовать sonme, чтобы не было дубликатов) ... тогда в вашем делегате приложения у вас есть один переключатель if if else, определяющий, включен ли на ipad иили iphone, который добавляет необходимые файлы

Это особенно удобно при использовании контроллера UITabbar, так как вы можете просто настроить контроллер либо с правами root для ipad, либо для iphone ...

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

SideSwipe

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...