Soy bastante nuevo en el desarrollo de mac (proveniente de un fondo web y de iOS) y no sé cómo puedo recibir una notificación cada vez que cambia el valor de un NSTextView. ¿Algunas ideas?Valor de NSTextView cambiado
Respuesta
Ups Acabo de ver que desea una devolución de llamada desde NSTextView y no NSTextField
Simplemente agregue en el encabezado del objeto que debe ser el delegado el protocolo
@interface delegateAppDelegate : NSObject <NSApplicationDelegate, NSTextViewDelegate> {
NSWindow *window;
}
Después de que agregue un método como
-(void)textDidChange:(NSNotification *)notification {
NSLog(@"Ok");
}
Asegúrese de que ha conectado la propiedad delegado del NSTextView (no NSScrollView) con el objeto que debe recibir el delegado
establece el delegado de nstextfield. en el archivo .h del delegado de agregar el protocolo de delegado En el archivo .m se agrega un método como -(void)controlTextDidChange:(NSNotification *)obj { NSLog(@"ok"); }
Espero que ayude
no esto es para NSTextField NSTextView – valexa
NSTextView es una subclase de NSTextField y así son sus delegados – kezi
Me temo que https://developer.apple.com/library/mac/documentation/cocoa/reference/applicationkit/classes/NSTextView_Class/Reference/Reference.html muestra claramente NSTextView hereda de NSText que hereda de NSView. NSTextField hereda de NSControl que también hereda de NSView. controlTextDidChange es un método delegado de NSControl que significa que NSTextField tiene acceso a controlTextDidChange, pero NSTextView no lo hace porque no hereda de NSControl o NSTextField. –
Aquí está la solución:
NSTextView *textView = ...;
@interface MyClass : NSObject<NSTextStorageDelegate>
@property NSTextView *textView;
@end
MyClass *myClass = [[MyClass alloc] init];
myClass.textView = textView;
textView.textStorage.delegate = myClass;
@implementation MyClass
- (void)textStorageDidProcessEditing:(NSNotification *)aNotification
{
// self.textView.string will be the current value of the NSTextView
// and this will get invoked whenever the textView's value changes,
// BOTH from user changes (like typing) or programmatic changes,
// like textView.string = @"Foo";
}
@end
- 1. UITextField Valor cambiado evento?
- 2. Ventana Eclipse "Variables", valor cambiado color
- 3. invocar método personalizado en el valor cambiado
- 4. NSTextView resaltado de sintaxis
- 5. html() método incorrecto cuando el valor de entrada ha cambiado
- 6. Finalización en NSTextView
- 7. NSTextField o NSTextView?
- 8. configurando un NSTextView
- 9. UILabel/NSTextView vs. CATextLayer
- 10. Enfoque en un NSTextView
- 11. Desplazamiento NSTextView línea por línea
- 12. Mostrar caracteres ocultos en NSTextView
- 13. Deshabilitar completamente la revisión ortográfica de NSTextView
- 14. NSpoint desde el punto de inserción NSTextView
- 15. Configuración de fuentes predeterminadas en NSTextView
- 16. ¿Cómo puedo saber cuándo NSTextView pierde foco?
- 17. NSTextView, anexando texto y desplazamiento suave
- 18. ¿Cómo configurar la fuente en NSTextView?
- 19. ¿Cómo ha cambiado Haskell?
- 20. C# PrintDocument Evento cambiado
- 21. ¿Cómo cambiar el tamaño de NSTextView según su contenido?
- 22. Casilla de verificación Wicket que envía automáticamente su valor cambiado al objeto de dominio
- 23. ¿Qué oyente puede saber que se ha cambiado el valor de JTextPane?
- 24. Comprobando si el usuario ha cambiado el valor de cookie, manualmente
- 25. seleccionar las filas donde el valor de la columna ha cambiado
- 26. DataGridView & BindingList: ¿Cómo verificar si el valor de la celda ha cambiado?
- 27. Creación de un enlace dentro de la aplicación en NSTextView
- 28. Cambio del color de selección de texto en NSTextView
- 29. Detectando DataContext cambiado en Silverlight
- 30. WPF TextBlock texto cambiado notifique
¡Eso es todo! Estoy bastante seguro de que esta fue una de las cosas que intenté, pero obviamente no lo hice bien. Está funcionando ahora :-) ¡Gracias! – tarnfeld
NSTextViewDelegate implementa NSTextDelegate eso es lo que funciona, pero también podría usar métodos específicos NSTextViewDelegate como - (BOOL) textView: (NSTextView *) aTextView shouldChangeTextInRange: (NSRange) affectedCharRange replacementString: (NSString *) replacementString – valexa
Esto solo obtendrá cambios del usuario interactuando directamente con NSTextView (p. ej., el usuario escribe en la vista de texto o copia y pega en ella o corta de ella). No detectará cambios en textView si usted cambia programáticamente textView como en 'textView.string = @" Foo ";'. Para eso, necesitas ser el delegado de textStorage de textview, como en 'textView.textStorage.delegate = self;' e implementar '- (void) textStorageWillProcessEditing: (NSNotification *) aNotification' en la clase del objeto que es self. De esta forma obtendrá cambios dirigidos por el usuario y cambios directos en el establecimiento de la propiedad. – Joel