Параметр захвата/клавиша команды внутри NSTextField

У меня есть NSTextField, используемый в NSViewController. Я хотел бы захватить специальные сочетания клавиш, такие как ⌥+0, чтобы сделать что-то особенное. Однако эти ключевые события не доставляются:

- (BOOL) control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector

Я знаю, что мы не можем переопределить событие keyDown для пользовательского NSTextField, так как в любом случае вместо нашего поля используется специальный редактор полей. Как мне работать с этими специальными ярлыками, не прибегая к добавлению скрытых NSMenuItem в главное меню?


person strangetimes    schedule 18.11.2016    source источник


Ответы (1)


То, что кажется простым делом, по-видимому, не работает на Mac. Использование пользовательского NSFormatter не сработает, так как я хотел зафиксировать каждое нажатие клавиши (включая клавиши-модификаторы). Два возможных варианта заключались в том, чтобы либо перехватить sendEvent на уровне NSWindow и поднять его до контроллера представления, на котором размещен сфокусированный элемент управления, либо использовать настраиваемый редактор полей. В итоге я вернул настраиваемый редактор полей для NSTextField (путем создания подкласса NSTextField / NSTextFieldCell и возврата объекта NSTextView подкласса для редактора поля). Таким образом, я смог аккуратно, используя делегаты, перехватывать нажатия клавиш и передавать их контроллеру представления для обработки. Нажатия клавиш, которые не были бы использованы, в противном случае обрабатывались бы редактором полей в обычном режиме.

person strangetimes    schedule 19.11.2016