NSTextFieldCell
eredita da NSCell
(così, tecnicamente da NSActionCell
che eredita da NSCell
). La classe NSCell
viene utilizzata per (dalla docs):
classe NSCell fornisce un meccanismo per la visualizzazione del testo o immagini in un oggetto NSView senza il sovraccarico di un intero NSView sottoclasse.
In particolare, la classe di cellule viene utilizzata per "la visualizzazione di testo o immagini", e non si tratta di interazione con l'utente. Analogamente, con la classe NSTextField
:
La classe NSTextField utilizza la classe NSTextFieldCell per implementare la sua interfaccia utente.
Le NSTextField
offerte con l'input utente effettivo, mentre utilizzando il cellulare campo di testo per implementare semplicemente la sua interfaccia utente, e allo stesso modo, i metodi delegato per fornire la notifica quando la redazione del testo è terminata viene fornito attraverso la classe NSTextField
e non attraverso la classe NSTextFieldCell
.
Se si desidera essere avvisati di quando la modifica si conclude in un NSTableView
, allora avete bisogno di registrarsi come un osservatore del NSTextDidEndEditingNotification
(si potrebbe desiderare di leggere il riferimento NSNotificationCenter classe se non si ha familiarità con le notifiche). Per fare ciò, inserisci quanto segue nella tua classe controller; la funzione awakeFromNib
è un buon posto per includerlo per garantire che essi siano stati chiamati avvio dell'applicazione:
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(textDidEndEditing:)
name:NSTextDidEndEditingNotification
object:tableView];
Dove tableView
è il puntatore al NSTableView
oggetto. Quindi, è sufficiente implementare il metodo come segue:
- (void)textDidEndEditing:(NSNotification *)aNotification
{
// Do what you want here
}
Non dimenticare di rimuovere se stessi in qualità di osservatore su deallocazione:
- (void)dealloc
{
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc removeObserver:self];
}
La ragione per cui si imposta l'oggetto che si sta osservando di essere il L'istanza NSTableView
(e non la cella stessa) è quella sotto il cofano, quando si modifica una cella nella tabella, la cella con cui si ha a che fare non viene modificata direttamente; è l'editor di campo della finestra (o personalizzato). Al termine della modifica, l'editor di campi passa quindi il nuovo valore per quella cella alla visualizzazione tabella. Tuttavia la vista tabella pubblicherà una notifica per dire che una cella ha finito di essere modificata.
Ho trovato che il metodo "TextDidEndEditing:" funziona, ma non il metodo "TextDidBeginEditing:". Hai qualche idea? – Yun