Как отобразить подпредставление, загруженное из отдельного файла NIB
Я разрабатываю настольное приложение Cocoa, которое использует список источников в стиле iTunes: разные элементы в списке источников приводят к тому, что в основной области содержимого отображаются разные представления.
Область содержимого полностью заполнена (вертикаль) NSSplitView
; слева находится NSOutlineView
список источников. Когда пользователь выбирает элемент слева, соответствующий вид появляется справа от разделителя.
Я могу сделать это достаточно хорошо, поместив все в один файл NIB и поместив без полей NSTabView
справа от сплиттера; чтобы переключать представления, мне просто нужно изменить выбранную вкладку. Но помещать все представления в один NIB - плохая практика, поэтому я пытаюсь переместить каждое из подпредставлений в свои собственные файлы NIB.
У меня есть довольно хорошее представление о большей части этого процесса - я создал NSViewController
подкласс для каждого из этих представлений (EntityDetailViewController
, GroupDetailViewController
и т. д.), установите для владельца файла каждого нового NIB соответствующий класс контроллера, установите view
соединение в каждом NIB и переработанные привязки. Чего я не знаю, так это как на самом деле изменить, какое подпредставление показывается на экране.
Я пытался использовать стандартный дженерик NSView
на правой стороне и отправив его addSubview:
Сообщения; Я попытался подключиться к нему в качестве первого подпредставления и вызова
NSView *newSubview = /* get subview from the new subview controller */
[[subview superview] replaceSubview:subview with:newSubview];
[self setSubview:newSubview];
Но все оставляет пространство пустым. Как отобразить подпредставление, загруженное из отдельного NIB?
1 ответ
Ваш общий подход кажется здравым. Вы убедились, что newSubview
из загруженного представления контроллер не ноль? Делает кадр newSubview
выглядеть правильно до и после добавления в иерархию представлений? Наконец, в какой момент вы используете replaceSubview:
код? Должно быть в awakeFromNib
или позже.