Динамически заполненное меню 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) как представленный объект.