2012-12-13 3 views
1

Непонятно, как повторно использовать контроллеры представлений. Если вы создали подкласс диспетчера представлений, который делает некоторые вещи (на самом деле не имеет значения, что он делает, только то, что он делает то, что вам нужно в представлении), может ли он использоваться с другим представлением или должен ли он снова быть подклассом?Повторное использование контроллеров просмотра

Другими словами, если мне нужна точно такая же функциональность в представлении в другой части моего приложения, могу ли я использовать исходный контроллер представления и просто добавить выходы из нового представления? Или я должен подклассифицировать пользовательский контроллер и дать представление его «собственному» контроллеру вида?

+0

Обычно каждый контроллер имеет свой собственный вид. Но, конечно, чтобы избежать дублирования кода, представления должны быть смоделированы таким образом, чтобы их можно было повторно использовать. Если у вас есть проблемы по этому вопросу, возможно, вам нужно переосмыслить структуру MVC. – GGrec

+0

Так ли это «правильно» иметь выходы из нескольких одинаковых видов в одном контроллере? – Bob

+2

«Если это глупо, но это работает, то это не глупо». – GGrec

ответ

3

Вы можете создать два xibs для контроллера вида.

Если у вас есть файлы ...

MyViewController.m 
MyViewController.h 

Тогда вы могли бы добавить xibs ...

MyViewControllerXib1 
MyViewControllerXib2 

Просто сделать "файла Владелец" MyViewController.

Затем, когда вам нужно макет пользовательского интерфейса от первого XIB вы можете позвонить ...

MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyViewControllerXib1" bundle:[NSBundle mainBundle]]; 

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

MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyViewControllerXib2" bundle:[NSBundle mainBundle]]; 

Объект, который вы get будет таким же, но изменится nib, устанавливающий пользовательский интерфейс.

ДРУГОЙ ПОДХОД

Просто мысли вслух здесь.

Вы также можете создать ViewController без наконечника.

Затем создайте два подкласса каждого из них с наконечником. Теперь у вас есть повторное использование кода и отдельные макеты, но вы также можете внести тонкие настройки управления в каждый из подклассов вашего «главного» контроллера.

После этого вы можете создать столько подклассов, сколько хотите, с помощью этого главного контроллера.

С ИСПОЛЬЗОВАНИЕМ раскадровки

Просто перетащите новый объект ViewController на раскадровке. Измените класс как класс контроллера вида и настройте пользовательский интерфейс и перетащите элементы управления в код и т. Д. Затем у вас будет два экрана, которые выглядят по-разному, но имеют один и тот же код функциональности.

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

+1

Я просто изучаю разработку IOS и ничего не знаю о xibs или nib. Я только что использовал раскадровки для компоновки приложения. И я тоже могу смутить мою терминологию. То, что я хочу сделать, это перетащить второй контроллер представления в другую часть моего приложения. Затем мне нужно назначить класс контроллера в Identity Inspector. Можно ли повторно использовать существующий подкласс или создать новый подкласс? – Bob

+1

А я вижу. Да, вы можете сделать это и с раскадными стенами. Насколько я понимаю, у вас есть VC (VC1) в какой-то момент вашей навигации. Затем вы перемещаетесь в приложении и переходите к другому контроллеру представления (VC2), который имеет те же функции, что и VC1, но другой макет. (верный?). В этом случае просто перетащите новый VC на раскадровку и установите класс таким же, но измените макет. Это, по сути, то, что я сказал, но используя раскадровки вместо отдельных xib. – Fogmeister

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