2013-04-01 3 views
0

Я пишу приложение без использования раскадровки/xib для создания представлений, и я не уверен, что лучше всего разместить свой код установки. Я попробовал несколько разных подходов, но я не уверен, что лучше всего сохранить код настройки установки отдельно от моего кода контроллера.Как создать представление приложений iOS программно

подходов я пытался до сих пор являются:

  1. Собирает все мой код установки просмотра (создание и кнопки позиционирования/этикетку) и т.д. внутри контроллеры viewDidLoad метода. Я уверен, что это плохой способ сделать что-то, потому что у вас много кода внутри вашего контроллера.

  2. Подкласс UIView и настройка элементов интерфейса внутри метода initWithFrame. Затем я либо добавляю этот вид поверх представления моих контроллеров представлений.

    _customView = [[CustomView alloc] initWithFrame:self.view.frame]; 
    _customView.customLabel.text = @"Foo"; 
    [self.view addSubView:_customView] 
    

или Поручаю контроллеры просмотра, чтобы быть моим customView.

_customView = [[CustomView alloc] initWithFrame:self.view.frame]; 
self.view = _customView; 
_customView.customLabel.text = @"Foo"; 

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

+0

Нужно ли вам повторно использовать этот код? Если да, подкласс или создание расширения категории для UIView будет в порядке. В этом случае я бы предпочел подкласс. –

+0

Да, цель - получить код как можно многократный и чистый, насколько это возможно. Я думаю, что подклассы хорошо работают, я просто не уверен в наилучшем способе использования подкласса. Возможно, в любом случае все в порядке. – AFraser

ответ

1

Если вам нужно использовать этот вид только один раз, оставьте код в viewDidLoad. Возможно, вы можете переместить код, необходимый для создания представления в определенном методе внутри вашего контроллера.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // other code here... 
    [self createView]; 
} 

Кроме того, вы можете также думать, чтобы переопределить метод loadView и поместить код там, если ваш вид будет на view вашего контроллера. От Apple док.

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

Если вам необходимо создать несколько раз ваше мнение, я подкласс UIView и использовать делегат шаблон общается с контроллером.

Если вы выберете этот подход, вам необходимо переопределить метод layoutSubviews, чтобы упорядочить детей в пределах вашего вида.

Яркий пример этого можно найти в How To Make a Custom UIView in iOS 5: A 5 Star Rating View.

+0

Хорошо, я вижу, как это самый простой подход, но разве это не значит, что у вас есть «живые» контроллеры и нарушающие шаблон дизайна MVC, который используют приложения iOS? – AFraser

+0

@AFraser Нет, вы подклассифицируете 'UIView', а не' UIViewController'. Это разные вещи. –

+0

@AFraser IMHO, этот подход очень чистый. Вы подклассифицируете представление.Вы общаетесь с контроллером delagate. Что вы имеете в виду с вашим комментарием? –

Смежные вопросы