Tengo una interfaz gráfica de usuario basada en vista que contiene un campo de texto para cada elemento de la interfaz gráfica de usuario. Cuando selecciono otro elemento del menú, quiero que mis campos de texto salgan del modo de edición. No pude encontrar de todos modos para hacer esto en los documentos nsTextField. ¿Algunas ideas?Forzar un campo de texto Cocoa para finalizar la edición
Respuesta
tiene que decirle a la ventana para eliminar primero el estado de respuesta del control:
[[textField window] makeFirstResponder:nil];
Esto va a terminar la edición y quitar el foco del campo de texto.
La siguiente solución de cocoabuilder.com - Stop edit session with a NSTextField me funciona tanto en OS X 10.9 como en OS X 10.10 para Objective-C y en 10.10 para Swift.
He aquí la versión de Objective-C:
@implementation CustomTextField
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
self.target = self;
self.action = @selector(action:);
return self;
}
- (void)action:(NSTextField *)textField {
// Make something else first responder, something neutral
// (or can be a fake invisible element)
[self.window makeFirstResponder:self.window.contentView];
// Other code
}
@end
Antecedentes: se acepta la solución en este tema nunca trabajó para mí en OS X 10.9 y 10.10 así que en lugar de llamar [[textField window] makeFirstResponder:nil];
ya que sugiere - que tenía que llamar makeFirstResponder
con alguna subclase NSResponder no nula (esta puede ser la vista de contenido de NSWindow o la vista de NSViewController que ambos funcionan en mi caso o una vista falsa de NSTextField que no es visible para casos más complejos).
Detalles importantes: -[NSWindow makeFirstResponder]
deben invocarse exactamente dentro del selector de acciones de NSTextField como muestra mi ejemplo. Ningún otro lugar en la tubería método NSTextField hizo el trabajo para mí (textDidEndEditing :, textShouldEndEditing: o control: textShouldEndEditing :)
aunque extraño, esta también fue la única solución que funcionó para mí. – Christian
de hecho esto funciona mientras que la respuesta aceptada no lo hace, en Yosemite –
Si había llamado al método desde la respuesta anterior en viewWillLayout, habría hecho todo en una fila sin crear ninguna subclase. – iSavaDevRU
sé que esto es una cuestión de edad, pero en caso de que alguien se está preguntando acerca veloz 3, que sólo funcionaba para mí con
DispatchQueue.main.async{ self.window?.makeFirstResponder() }
Este comando se debe utilizar en viewWillLayout y si necesidad de viewWillAppear y. Y eso es todo. Sin subclases e hilos paralelos.
[textField.window makeFirstResponder:nil];
Esto funciona bien con la ventana principal. Pero esto no funciona bien con ventanas modales.
Para usar ventanas modales viewDidAppear o dispatch_async:
dispatch_async(dispatch_get_main_queue(), ^{
[textField.window makeFirstResponder:nil];
});
- 1. cómo hacer campo de texto de edición para decimales
- 2. Forzar el cursor para ir al campo de texto
- 3. Extensión JIRA que agrega texto enriquecido para el campo Descripción de la edición
- 4. Obtener texto de un control de edición
- 5. Forzar que no se requiera un campo
- 6. ¿Puede un control combobox alojado en la celda DataGridView solicitar finalizar la edición?
- 7. Establecer texto para un campo de texto en UIWebView
- 8. cómo agregar texto en un texto de edición en android?
- 9. Cómo finalizar la edición en el interior NSTextFieldCell NSOutlineView después de pulsar la tecla ESC
- 10. ¿Cuál es la mejor manera de implementar un búfer para un control de edición de texto?
- 11. SQL INSERT, forzar campo truncado
- 12. Mac OS X: cómo forzar a un editor de campo a desplazarse en lugar de ajustar el texto?
- 13. Cocoa Autolayout - ¿Por qué no puedo eliminar o modificar la restricción de ancho (morado) en un campo de texto?
- 14. textfieldDidEndEditing no se dispara cuando termino edición y elegir otro uicontrol de campo de texto
- 15. ¿La forma correcta de finalizar un BeginInvoke?
- 16. opción de pegar para el texto de edición
- 17. ¿Puedo cambiar el tamaño del Cursor en el campo de texto de edición de Android?
- 18. Edición de etiquetas en un cuadro de texto WPF
- 19. extjs eliminar/leer campo de texto para formar un error?
- 20. Edición in situ de texto en UITableViewCell?
- 21. Cómo deshabilitar la edición de cuadros de texto?
- 22. cómo configurar un texto en un texto de edición que está en un cuadro de diálogo?
- 23. Edición de texto en línea en SVG
- 24. establece programáticamente la sugerencia de texto de edición en android?
- 25. tinyMCE - edición de código fuente en un área de texto
- 26. Edición de texto en PDF con Java
- 27. Analizar texto (lematización, distancia de edición)
- 28. Android Word-Wrap Texto de texto de edición
- 29. Toque fuera del texto de edición para perder el foco
- 30. Edición de texto enriquecido - designMode vs contentEditable
Esto debería ser un FAQ – uchuugaka
no funciona (al menos en Yosemite). –
Funciona bien en Yosemite aquí. ¿Estás llamando desde el hilo principal? \t 'dispatch_async (dispatch_get_main_queue(),^{[textField.window makeFirstResponder: nil];});' –