Заставить NSSearchField использовать NSTokenFieldCell?

Я пытаюсь эмулировать токенизированную функцию поиска Mail.app и Finder.app на 10.7+, где есть то, что выглядит как NSSearchField со значком увеличительного стекла поиска слева и кнопкой отмены (x) справа, но также включает токены внутри поля поиска.

NSSearchField с токенами

Есть ли способ заставить NSSearchField использовать NSTokenFieldCell вместо NSSearchFieldCell? Я попытался вызвать -setCell: в экземпляре NSSearchField, который работает и, кажется, заменяет ячейку, о чем свидетельствует вызов po [searchField cell] в отладчике, но рисование поля поиска прерывается, и текстовое поле не рисуется.

Правильно ли я подхожу к этому или есть лучший способ сделать это? Спасибо!

Обновление от 25 октября 2016 г.. С помощью инспектора специальных возможностей я обнаружил, что Finder и Mail используют смешанные частные подклассы:

  • SGTSearchField : NSSearchField
    • SGTSearchFieldCell : NSSearchFieldCell
    • SGTTokenFieldCell : NSTokenFieldCell

Они являются частью частной структуры под названием Suggestions.framework. Надеюсь, Apple сделает эти классы общедоступными в будущем. Не забудьте отправить радар, если вы хотите, чтобы эта функция была общедоступной.


person Andrew    schedule 23.10.2012    source источник
comment
Я пришел к тому же вопросу при попытке реализовать токенизированную панель поиска. Поскольку раньше я использовал NSSearchField, я также ищу метод для объединения NSSearchField и NSTokenField. Вы получили какое-либо решение?   -  person Allen Hsu    schedule 27.02.2013


Ответы (1)


Лучший ответ, который у меня есть для вас двоих, — просто использовать NSTokenField. Возможно, вы сможете изменить его, чтобы отобразить маленький значок поиска. Но если это не имеет решающего значения, вы можете получить множество токенизированных функций от NSTokenField.

person Scott Yelvington    schedule 12.05.2016