Разложение пользовательского интерфейса iPhone - несколько просмотров в одном xib? - PullRequest
0 голосов
/ 15 декабря 2009

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 15 декабря 2009

Во всяком случае, как я могу иметь несколько просмотров в одном 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:, чтобы скрыть один и показать другой.

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

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

2 голосов
/ 15 декабря 2009

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

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

0 голосов
/ 15 декабря 2009

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

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

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

...