2009-12-15 3 views
0

У меня есть один основной вид с ассоциированным контроллером. У меня есть довольно сложные панели инструментов, которые мне нужно включать и отключать в зависимости от взаимодействия с пользователем.Разделение пользовательского интерфейса iPhone - несколько просмотров в одном xib?

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

В любом случае, как я могу иметь несколько видов в одном xib и правильно их инициализировать? Как если бы я хотел отобразить одно из моих пользовательских представлений в центре экрана, как бы я это сделал?

В качестве альтернативы, если я разделяю виды на несколько xib, как я могу заставить их ссылаться на один объект контроллера для своих IBOutlets/IBActions?

+0

Duplicate: http://stackoverflow.com/questions/1726250/nsviewcontroller-and-multiple-subviews-from-a-nib –

ответ

2

Во всяком случае, как я могу иметь несколько представлений в одном XIb и инициализировать их правильно? Например, если я хочу показать один из моих пользовательских представлений в центре экрана, как бы я это сделал?

У вас может быть столько UIView s, сколько вы хотите в своем xib. Обычно вы делаете «основной» вид - тот, который подключен к виду представления файла владельца файла (т. Е. Ваш контроллер представления), - а остальные могут сидеть в xib на том же уровне. Вы можете подключить их к другим свойствам в контроллере представления.

Вы можете сделать эти виды, как Подглядывает для основного вида. (Немногие, это очень много). Предположим, у вас есть два вида, FooView и BarView. Вы хотите, чтобы FooView присутствовал при запуске. Поэтому вы просто установите BarView, чтобы быть скрытым в IB. Тогда ваш контроллер представления может выглядеть примерно так:

@interface MyViewController : UIViewController 
{ 
    FooView* fooView; 
    BarView* barView; 
    ... 
} 
... 
@property (nonatomic, retain) IBOutlet FooView* fooView; 
@property (nonatomic, retain) IBOutlet BarView* barView; 
... 

Затем внутри вашего кода, если вы хотите изменить взгляды, просто использовать метод setHidden:, чтобы скрыть одну и показать другим.

В качестве альтернативы, если отдельные взгляды на множество xibs, как я могу иметь их ссылаться на тот же объект, контроллер для их IBOutlets/IBActions?

У вас могут быть другие xibs, использующие один и тот же контроллер. Я сам это сделал. Просто установите File Owner в соответствующий класс.

2

Это на самом деле очень просто. Вы просто создаете новое представление корневого уровня в своем XIB-файле и создаете для этого представления IBOutlet в своем главном контроллере.

Что касается загрузки представлений непосредственно из XIB, использующих один и тот же контроллер представлений, это немного более неряшливо .. вам, по существу, нужно будет прокручивать элементы в XIB-файле и находить нужный элемент.

+0

Я сделал это, но я не перетащил свой BarView в MainViewController, поэтому он не появляется. Как я могу отобразить его? – DevDevDev

+0

Nevermind понял, должен был добавить его в качестве подсмотра. Думал, что я пробовал это без успеха, но это сработало. – DevDevDev

0

Следует отметить, что все представления инициализируются, когда требуется какое-либо из видов.

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

Если взгляды несколько сложны, вы должны разделить их на разные файлы .xib. В этом случае родительский UIViewController будет иметь IBOutlets для других подклассов UIViewController, а не IBOutlets до UIViews. Контроллеры представлений автоматически обрабатывают ленивую загрузку своих соответствующих представлений.

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

  • Нет связанных вопросов^_^