NSTextFieldCell
hereda de NSCell
(bueno, técnicamente de NSActionCell
que hereda de NSCell
). La clase NSCell
se utiliza para (a partir de la docs):
La clase NSCell proporciona un mecanismo para la visualización de texto o imágenes en un objeto NSView sin la sobrecarga de una subclase completo NSView.
En particular, la clase de células se utiliza para "mostrar texto o imágenes", y no se trata de la interacción con el usuario. Del mismo modo, con la clase NSTextField
:
La clase NSTextField utiliza la clase NSTextFieldCell para implementar su interfaz de usuario.
Los NSTextField
se ocupa de la entrada del usuario real, mientras que el uso de la célula campo de texto para simplemente poner en práctica su interfaz de usuario, y de manera similar, los métodos de delegado para proporcionar una notificación cuando la edición de texto ha terminado se proporciona a través de la clase NSTextField
y no a través de la clase NSTextFieldCell
.
Si desea ser notificado cuando termina la edición en un NSTableView
, entonces es necesario que se registre como un observador de la NSTextDidEndEditingNotification
(es posible que desee leer la referencia NSNotificationCenter clase si no está familiarizado con las notificaciones). Para hacer esto, coloque lo siguiente en su clase de controlador; la función awakeFromNib
es un buen lugar para incluirlo para asegurar que se llama en el inicio de su aplicación:
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(textDidEndEditing:)
name:NSTextDidEndEditingNotification
object:tableView];
Dónde tableView
es el puntero al objeto NSTableView
. Luego, basta con aplicar el método de la siguiente manera:
- (void)textDidEndEditing:(NSNotification *)aNotification
{
// Do what you want here
}
No se olvide de eliminar a sí mismo como un observador sobre cancelación de asignación:
- (void)dealloc
{
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc removeObserver:self];
}
La razón por la que se establece el objeto que se está observando a ser el NSTableView
instancia (y no la celda en sí) es que debajo del capó, cuando edita una celda en la tabla, la celda con la que está tratando no se está editando directamente; es el editor de campo de la ventana (o un personalizado). Cuando termina la edición, el editor de campo pasa el nuevo valor de esa celda a la vista de tabla. Sin embargo, la vista de tabla publicará una notificación para decir que una celda ha terminado de editarse.
Encontré que el método "TextDidEndEditing:" funciona, pero no el método "TextDidBeginEditing:". ¿Tiene alguna idea? – Yun