В моем приложении Cocoa у меня есть окно, содержащее NSTextField (как есть) и NSScrollView (подклассы). У меня есть NSViewController, который управляет NSView окна, содержащего текстовое поле и прокрутку.Обработка вкладок в представлении Cocoa с текстовым полем и прокруткой.
При запуске приложения NSTextField имеет фокус, а ввод вводит символы в это текстовое поле. Когда я нажимаю клавишу TAB, он теряет фокус. Но ничего больше в интерфейсе, как NSScrollView, не фокусируется. Я не могу сказать, куда идут какие-либо события.
Как перенести фокус на NSScrollView, чтобы события на нем могли повлиять (например, клавиши со стрелками, неявный поиск и т. Д.)?
Когда в представлении прокрутки (вид документа) есть несколько подменю, но ни один из них не имеет под-под-представлений, фокус никогда не покидает поля редактирования текста. Но когда пара суб-представлений имеет суб-под-представления (vanilla NSViews), то нажатие TAB несколько раз не показывает фокус на прокрутке, но в конечном итоге возвращается в поле редактирования текста. Длина цикла, по-видимому, связана с количеством под-под-представлений. – jsbox
Отключение «acceptsFirstResponder» в подзапросах очистило ситуацию. Оказывается, что они все еще принимают события mouseDown, поэтому я подумал, что для «acceptsFirstResponder» для них должно быть установлено YES. Но установка «acceptsFirstResponder» для представления прокрутки не изменяет никакого поведения по умолчанию, так что это все еще загадка. – jsbox
Как вы определяете, что просмотр прокрутки не фокусируется? Вы пытались изменить свой «focusRingType»? Это может быть неэффективно, поэтому визуальных изменений не будет. Во всяком случае, как я уже сказал, более типичным для представления документа является принятие фокуса. Например, когда представление таблицы находится внутри прокрутки, это представление таблицы, которое принимает фокус, а не вид прокрутки. –