Dal Cocoa Event-Handling Guide - The Responder Chain:
La catena risponditore è una serie concatenata di oggetti responder a cui è applicato un messaggio di evento o azione. Quando un determinato oggetto responder non gestisce un particolare messaggio, l'oggetto passa il messaggio al suo successore nella catena (ovvero, il suo prossimo risponditore).
Quando si preme un tasto, la finestra riceve l'evento keyDown. Quindi invia l'evento al primo risponditore , che di solito è il controllo con una cornice blu attorno al bordo (prova a fare clic sul campo dell'indirizzo in Safari o Firefox, quando è blu-bezeled, quindi ha lo stato di primo risponditore) .
Se il primo risponditore non mangia la pressione del tasto (il campo indirizzo Safari fa mangiare quando visualizza un carattere), allora passa lungo la catena risponditore al successiva risponditore nella gerarchia vista, quindi alla finestra e al controller della finestra come potete vedere nello Guide.(Fai attenzione che l'azione che risponde è un'altra storia.)
Quindi devi implementare il keyDown: su una vista della tua finestra o nella finestra stessa, se non ha viste che mangiano gli eventi. Il modo più semplice per testare è sovrascrivere keyDown: metodo di una finestra vuota
Per mettere le tue mani nel funzionamento interno puoi anche provare a sovrascrivere sendEvent: metodo di una finestra. sendEvent: invia gli eventi alle viste della finestra, e da lì è possibile ad esempio registrare tutti gli eventi gestiti dalla finestra.
Fare attenzione che il controller della finestra, se presente, sia l'ultimo risponditore per i messaggi di eventi. I delegati ricevono solo messaggi di azione, non messaggi di eventi. – IlDan
Buona cattura. Modificherò la mia risposta per non affermare che il delegato della finestra funzionerà. –