Domanda

Sto lentamente imparando Objective-C e Cocoa, e il solo modo che ho per vedere finora per catturare gli eventi chiave nel Testo di Vista è quello di utilizzare la delega, ma sto avendo problemi a trovare documentazione utile ed esempi su come implementare una soluzione.Può qualcuno mi punto nella giusta direzione o la fornitura di alcuni di prima mano di aiuto?

È stato utile?

Soluzione

In generale, il modo in cui attuazione è sufficiente aggiungere la funzione necessaria alla vista del controllore, e impostare il suo delegato.Per esempio, se si desidera che il codice da eseguire quando la vista viene caricato, è possibile delegare la vostra vista per il controller, e implementare la awakeFromNib funzione.

Così, per rilevare la pressione di un tasto in un testo, assicurarsi che il controller è il testo di vista delegato, e quindi implementare questo:

- (void)keyUp:(NSEvent *)theEvent

Si noti che questa è una malattia ereditaria NSResponder metodo, non una NSTextView metodo.

Altri suggerimenti

Solo un consiglio per l'evidenziazione della sintassi:

Non evidenziare tutto il testo in una sola volta - è molto lento.Inoltre non evidenziare l'ultima modifica di testo utilizzando -editedRange - è molto lento anche se l'utente incolla di un grande corpo di testo nella finestra di visualizzazione.

Invece è necessario evidenziare il testo visibile, che è come questo:

NSRect visibleRect = [[[textView enclosingScrollView] contentView] documentVisibleRect];
NSRange visibleRange = [[textView layoutManager] glyphRangeForBoundingRect:visibleRect inTextContainer:[textView textContainer]];

Quindi il feed visibleRange per l'evidenziazione del codice.

E ' importante dire a noi quello che stai veramente cercando di realizzare l'obiettivo di livello superiore che si pensa di catturare gli eventi chiave in un NSTextView affrontare.

Per esempio, quando qualcuno mi chiede come catturare gli eventi chiave in un NSTextCampo che cosa si vuole veramente sapere è come per convalidare l'input in campo.Fatto impostando il campo formatter per un'istanza di NSFormatter (se uno dei formattatori incluso nel Cacao o uno personalizzato), non dalla elaborazione di sequenze di tasti direttamente.

Così, dato che esempio, che cosa stai realmente cercando di realizzare?

Ho fatto un po ' duro di scavo, e ho trovato una risposta alla mia domanda.Prendo al di sotto, ma grazie ai due ragazzi che hanno risposto.Penso che di Overflow dello Stack è un sito fantastico già--spero di più gli sviluppatori Mac a trovare la loro strada in una volta che la beta è finita--questo potrebbe essere una grande risorsa per gli altri sviluppatori che cercano di transizione alla piattaforma.

Così ho fatto, come suggerito da Danny, trovare la mia risposta in delegazione.Quello che non ho capito da Danny post è che ci sono una serie di delegato abilitato metodi della delega oggetto, e che il delegato deve implementare tali eventi.E così, per una TextView, sono stato in grado di trovare il metodo textDidChange, che ha raggiunto ciò che volevo in un modo ancora migliore di una semplice acquisizione del tasto e l'avrebbe fatto.Quindi, se ho implementare nel mio controller:

- (void)textDidChange:(NSNotification *)aNotification;

Posso rispondere per il testo viene modificato.Ci sono, naturalmente, altri metodi disponibili, e sono eccitato all'idea di giocare con loro, perché so che imparerò un sacco come faccio io.Grazie ancora, ragazzi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top