Как отобразить подпредставление, загруженное из отдельного файла 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 или позже.

Другие вопросы по тегам