Я работаю с NSOutlineView
, который имеет два столбца. Мой dataSource
предоставляет представление схемы с деревом элементов пользовательского класса, который представляет типы файлов (то есть вы инициализируете его с помощью UTI). Первый столбец — это отображаемое имя типа файла (например, «Исходный код», «Документ NIB Interface Builder» и т. д.). Второй столбец — это NSPopUpButtonCell
, который должен позволить пользователю выбрать обработчик для данного типа документа (подумайте о панели настроек Xcode «Типы файлов», и вы в значительной степени там).
Я могу сгенерировать NSMenu
для заданного элемента в дереве, заполненного параметрами на основе записей базы данных Launch Services для UTI, дополненного значком соответствующего приложения и т. д. На самом деле прекрасно работает само меню, заполняемое способом NSPopUpButtonCellWillPopUpNotification
.
Проблема в том, что, как я ни старался, ячейка, когда меню не всплывает, всегда содержит ровно одну из двух вещей: либо пустую строку, либо текст по умолчанию для ячейки, первый, если результат -handlerName
для элемента (атрибут, назначенный столбцу) не равен nil
, в противном случае последний.
Более того, я вручную вызываю -selectItem:
на экземпляре NSPopUpButtonCell
, что кажется неправильным. Напротив, левый столбец, который представляет собой просто NSTextFieldCell
, все просто работает (хотя все, что ему нужно сделать, это прочитать значение из элемента и представить его).
(Отказ от ответственности: я новичок в Cocoa UI; я знаю Objective-C и множество других языков программирования, но у меня нет большого опыта создания пользовательских интерфейсов для Mac OS X, так что будьте осторожны).