Текстовое поле не обрабатывает редактирование, как таковое. Когда текстовое поле имеет фокус, текстовое представление добавляется в окно, перекрывая область текстового поля. Это называется «редактор полей», и он отвечает за обработку редактирования.
Кажется, что наиболее вероятное место для изменения поведения двойного щелчка находится в объекте текстового хранения, используемом этим текстовым представлением. NSTextStorage
унаследовал от NSMutableAttributedString
который наследует от NSAttributedString
который имеет - doubleClickAtIndex
: метод. Этот метод возвращает диапазон текста, который должен быть выбран двойным щелчком по определенному индексу.
Итак, вы захотите реализовать подкласс NSTextStorage
, который переопределяет этот метод и в некоторых случаях возвращает другой результат. NSTextStorage
- полу-абстрактный базовый класс кластера классов. Подклассификация требует немного больше, чем обычно. Вы должны реализовать примитивные методы NSAttributedString
и NSMutableAttributedString
. См. Документы об этом.
Есть несколько мест, чтобы настроить редактор поля, заменив его объект хранения текста с экземпляром своего класса:
Вы могли бы реализовать пользовательский подкласс NSTextFieldCell
. Установите текстовое поле, чтобы использовать его как свою ячейку. В вашем подклассе переопределить - fieldEditorForView
:. В своем переопределении выполните экземпляр NSTextView
. Получите его layoutManager и вызовите - replaceTextStorage
: на этом, передав ему экземпляр вашего пользовательского класса хранения текста. (Это проще, чем собрать иерархию объектов, связанных с редактированием текста, хотя вы можете сделать это сами.) Установите для свойства fieldEditor текстового представления значение true и верните его. В вашем окне делегат, реализует - windowWillReturnFieldEditor:toObject
:. Создайте, настройте и верните NSTextView
, используя ваше собственное текстовое хранилище, как указано выше.