Il sito a cui si fa riferimento nei commenti alla risposta accettata ... è ora "SUSPENDED" dal webhost e la cache di Google non ha lo screenshot che contiene il passaggio chiave.
Quindi, ecco una soluzione alternativa ho scoperto che:
- funziona perfettamente
- non richiede sottoclasse
Per alcuni tasti (ENTER, Elimina, Backspace, ecc), Apple fa NON richiamare i normali metodi controlTextDidEndEditing: etc. Invece, Apple seleziona i singoli selettori per ogni chiave magica, ma c'è un metodo che puoi usare per intercettarlo.
documentazione ufficiale
di Apple qui:
https://developer.apple.com/library/mac/documentation/TextFonts/Conceptual/CocoaTextArchitecture/TextEditing/TextEditing.html#//apple_ref/doc/uid/TP40009459-CH3-SW31
... ma nel caso in cui si annulla/viene spostato, aggiungere questo metodo nel vostro delegato:
- (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector
{
BOOL retval = NO;
if (commandSelector == @selector(insertNewline:)) {
retval = YES; // causes Apple to NOT fire the default enter action
// Do your special handling of the "enter" key here
}
NSLog(@"Selector = %@", NSStringFromSelector(commandSelector));
return retval;
}
Nel mio caso, ho voluto per sovrascrivere anche il tasto backspace - eseguendo l'app con questo metodo, ho ricevuto un output che diceva che il selettore era "deleteBackward:", quindi ho aggiunto un'altra istruzione if lì per reagire.
Ciao, Grazie, ma come faccio a filtrare per il tasto Invio perché quando si mettono a fuoco o sfocatura dal campo di testo viene attivata anche l'azione. THanks – Chris
Per ricevere una notifica quando la modifica è completa (immettere chiave o tasto tab viene colpito) viene chiamato il metodo controlTextDidEndEditing della classe delegato, in cui è possibile attivare l'azione. Se vuoi che la tua azione venga attivata solo per la chiave di invio, devi scrivere un formattatore personalizzato o una classe NSTextfield personalizzata. – Raviprakash
THANK Gudda. In realtà ho appena scoperto che puoi inviare l'azione solo su invio come descritto qui: http://mojomonkeycoding.com/2009/11/14/calling-an-action-when-hitting-return-in-an-nstextfield /. Quindi per fortuna non c'è bisogno di sottoclasse. – Chris