NSTable/OutlineView: редактировать текстовое поле в строке, не выбирая строку

Контекст:

У меня есть NSOutlineView, который действует как список источников, но не использует фактический стиль выделения списка источников. (Представьте боковую панель в Finder.)

Этот layoutView имеет только два уровня: 1) "группы" и 2) "подэлементы". Дополнительной вложенности нет --- опять же, как и исходный список в Finder.

Что я хочу:

Строки «группы» верхнего уровня в моем OutlineView — это NSTableCellViews с одним NSTextField. Я хотел бы, чтобы мои пользователи могли редактировать текст в этом текстовом поле (переименовывать группу) БЕЗ, позволяя им выбирать всю строку группы в OutlineView.

Пока я не нашел способ сделать это. Если я предотвратил выбор групповых строк в моем делегате для OutlineView, невозможно будет редактировать текстовое поле. Когда я разрешаю выбор групповых строк, я могу изменить текстовое поле так же, как и любое другое.

Если не считать подклассов и обработки событий мыши, есть ли простой способ сделать это? Должна ли строка в NSTableView всегда выбираться до редактирования текстовых полей в этой строке?


person Bryan    schedule 06.09.2015    source источник


Ответы (1)


Я думаю, будет работать использование пользовательского подкласса NSOutlineView, в котором вы переопределяете -validateProposedFirstResponder:forEvent: для возврата true, если предлагаемый первый ответчик находится в строке группы. Верните все, что super возвращает для любого другого предложенного первого ответчика.

Вы можете определить, в какой строке находится предложенный первый респондент, вызвав -rowForView:.

См. этот сообщение в блоге. от инженера Apple, который написал материал для табличного представления на основе представлений.

person Ken Thomases    schedule 06.09.2015
comment
Это работает отлично. Однако мне придется пересмотреть свой подход. Я понимаю, почему Apple требовала выбора строки перед редактированием текстового поля — если вы этого не сделаете, больше невозможно захватить строку и перетащить ее, чтобы изменить ее порядок. Первый щелчок теперь редактирует поле вместо перетаскивания. - person Bryan; 06.09.2015