Динамически заполненное меню NSPopUpButtonCell в NSOutlineView

Я работаю с NSOutlineView который имеет две колонки. мой dataSource предоставляет представление структуры с деревом элементов пользовательского класса, который представляет типы файлов (то есть вы инициализируете его с помощью UTI). Первый столбец - это отображаемое имя типа файла (например, "Исходный код", "Документ Interface Builder NIB" и т. Д.). Второй столбец NSPopUpButtonCell который должен позволить пользователю выбрать обработчик для данного типа документа (подумайте о панели предпочтений Xcode "Типы файлов", и вы в значительной степени там).

Я могу создать NSMenu для данного элемента в дереве, заполненного параметрами, основанными на записях базы данных Launch Services для UTI, с соответствующим значком приложения и т. д. На самом деле, само меню прекрасно работает, заполнив NSPopUpButtonCellWillPopUpNotification,

Проблема в том, что, как я мог бы попытаться, ячейка, когда меню не открывается, всегда содержит точно одну из двух вещей: либо пустую строку, либо текст по умолчанию для ячейки, первый, если результат -handlerName на элементе (атрибут, назначенный столбцу) не являетсяnil, последнее иначе.

Более того, я звоню вручную -selectItem: на NSPopUpButtonCell экземпляр, который просто кажется неправильным. Напротив, левый столбец, который является просто NSTextFieldCellвсе просто работает (хотя и предоставлено, все, что нужно сделать, это прочитать значение из элемента и представить его).

(Отказ от ответственности: я довольно новичок в какао-интерфейсе; я знаю Objective-C и много других языков программирования, но у меня нет большого опыта создания интерфейсов для Mac OS X, так что будьте осторожны).

1 ответ

Поскольку я также борюсь с outlineViews и popUpButtons, мне бы очень хотелось узнать ответ на этот и многие другие вопросы. Боюсь, я не могу вам помочь, но одна вещь привлекла мое внимание:

Я могу создать NSMenu для данного элемента в дереве

За прошедшие извилистые недели я узнал одну вещь: работая с NSTreeController и источником данных, всегда предоставляйте NSTreeNodes, устанавливающие ваш реальный объект (в данном случае NSMenu) как представленный объект.

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