Соглашения об именах для универсальных приложений - PullRequest
6 голосов
/ 05 марта 2011

Я пишу универсальное приложение для iOS (iPad и iPhone) и нахожу себя с очень длинными именами классов, которые нельзя разделить между двумя приложениями:

FamilyViewController_iPhone.h/m
FamilyViewControllerA_iPad.h/m

DetailViewControllerB_iPhone.h/m
DetailViewControllerB_iPad.h/m

Кроме того, классы внутри этих парней имеют полное имя (включая устройство), так что Interface Builder может легко их использовать.

Я рассматривал что-то вроде AControllerA.h и BControllerA.h, где A = iPhone и B = iPad, но не слишком рад этой опции.

Каково постоянное соглашение для таких классов в универсальном приложении iOS - или я (надеюсь) упускаю что-то, что устраняет эту необходимость?

Ответы [ 3 ]

4 голосов
/ 05 марта 2011

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

Я избегаю использования названий платформ в моих контроллерах представления. Я бы имел:

FamilyViewController.h
FamilyViewController.m
FamilyViewController.xib (which is used for the iPad UI)
FamilyViewController~iphone.xib

Скорее всего, у вас будет невероятно похожая функциональность как для iPhone, так и для iPad, или, если не так, у вас все равно будет много совпадений.

Я также никогда не заставляю свои контроллеры представления действовать как мои контроллеры таблицы. Я храню эту функциональность в отдельных объектах. Таким образом, если приложение iPhone имеет 2 или 3 таблицы на разных экранах, но iPad показывает все 3 из этих таблиц на одном экране, вы можете просто создать экземпляр каждого из этих контроллеров таблиц, и весь код можно использовать повторно.

2 голосов
/ 28 июля 2011

Если вы хотите использовать один и тот же класс YourClass с YourClass.xib и YourClass-iPad.xib, то посмотрите этот макрос, который я использую:

#define getXIB(s) ( (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? @"" #s "-iPad" :@"" #s )

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

YourClass * viewController = [[YourClass alloc] initWithNibName:getXIB(YourClass) bundle:nil];
1 голос
/ 05 марта 2011

Я не уверен, что есть стандартный способ справиться с этим.

Одна из возможностей - использовать кластерную стратегию класса.Если FamilyViewController_iPad и FamilyViewController_iPhone очень похожи, то сделайте их подклассами абстрактного класса FamilyViewController.Настройте -initWithNibName: bundle: метод FamilyViewController так, чтобы он возвращал экземпляр версии ... iPad или ... iPhone, в зависимости от того, на каком устройстве запущено приложение.В большей части вашего кода вы будете иметь дело только с FamilyViewController.Конечно, вам все равно нужно будет использовать имя подкласса в своих кончиках, но, по крайней мере, ваш код будет легче читать.

...