Как отобразить подпредставление, загруженное из отдельного файла NIB - PullRequest
2 голосов
/ 02 июня 2010

Я разрабатываю настольное приложение 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 Ответ

0 голосов
/ 01 сентября 2010

Ваш общий подход кажется здравым. Вы убедились, что newSubview из загруженного контроллера представления не ноль? Кадр newSubview выглядит правильно до и после добавления в иерархию представлений? Наконец, в какой момент вы используете код replaceSubview:? Это должно быть в awakeFromNib или позже.

...