Как получить объекты в цепочке респондента для обработки сообщений `insertText:`? - PullRequest
0 голосов
/ 25 марта 2009

У меня есть подкласс NSView, который реализует acceptsFirstResponder, resignFirstResponder и becomeFirstResponder. Также реализован следующий метод:

-(void)keyDown:(NSEvent *) event {<br> [self interpretKeyEvents:[NSArray arrayWithObject:event]]; }

Я обрабатываю сообщения, которые interpertKeyEvent: отправляет в классе appController (appController является делегатом NSWindow и поэтому является частью цепочки респондента).

Этот подход прекрасно работает для большинства сообщений, генерируемых interpertKeyEvent:, например, insertNewline:, moveUp: и moveDown:, но не работает для insertText:.

Как получить объекты в цепочке респондента для обработки insertText: сообщений?

Ответы [ 2 ]

0 голосов
/ 13 октября 2009

Вы должны реализовать протокол NSTextInput для вашего класса, тогда будет вызван insertText. Взгляните на nsterm.m в Aquamacs для примера того, как его реализовать.

0 голосов
/ 25 марта 2009

Согласно документации стандартная реализация NSResponder:

"Реализация NSResponder просто передает это сообщение следующему респонденту или издает звуковой сигнал, если следующего респондента нет."

На ум приходят две возможности: либо ваше представление находится не там, где вы ожидаете, что оно находится в цепочке респондента, или ваша подпись метода не соответствует ожидаемой:

  • (аннулируются) InsertText: (идентификатор) aString

Как вы реализуете acceptsFirstResponder, resignFirstResponder и становитьсяFirstResponder?

Использует ли ваше приложение NSWindowControllers или это приложение на основе документов?

Дополнительная документация, касающаяся архитектуры обработки событий:

http://developer.apple.com/DOCUMENTATION/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html#//apple_ref/doc/uid/10000060i-CH3-SW2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...