objective c - no puede editar NSTextField en hoja en tiempo de ejecución
objective-c cocoa (2)
Al hacer clic en un botón, me gustaría mostrar una hoja con un mensaje de correo electrónico + contraseña con opciones para guardar y cancelar. La interfaz de usuario está configurada, las acciones están en su lugar, y la hoja aparece y cancela como se esperaba. El problema es que no puedo editar ninguno de los NSTextFields en tiempo de ejecución; aparecen desactivados, y el sonido del error de SO se reproduce cada vez que se presiona la tecla cuando la hoja está abierta. Leí en SO que UIActionSheet es apropiado, pero esta no es una aplicación de iOS.
Los campos de texto están habilitados, y anteriormente habían estado trabajando en otro panel. Me aseguré de que los enlaces de IBAction estén intactos, pero de lo contrario no estoy seguro de cómo solucionarlos.
¿Qué pasa con una hoja que haría que un NSTextField que de otra manera estaba sano rechace la entrada?
// show the sheet
-(IBAction)showAccount:(id)sender {
[NSApp beginSheet:accountWindow
modalForWindow:prefsWindow
modalDelegate:self
didEndSelector:NULL
contextInfo:NULL];
}
// cancel/hide the sheet
-(IBAction)cancelAccount:(id)sender {
[NSApp endSheet:accountWindow];
[accountWindow orderOut:nil];
}
Editar: Acabo de descubrir que puedo hacer clic derecho y pegar texto en cada campo, pero no puedo seleccionar ni eliminar. Parece que los NSTextFields no se enfocan y no reciben entrada de teclado como lo harían normalmente. También olvidé mencionar que mi botón Guardar llama y ejecuta su método relacionado correctamente.
La vista no tiene que tener una barra de título en absoluto.
Vea por qué NSWindow sin styleMask: NSTitledWindowMask no puede ser keyWindow?
Qué estados: si desea que una ventana sin título pueda convertirse en una ventana de clave, debe crear una subclase de NSWindow y anular -canBecomeKeyWindow de la siguiente manera:
- (BOOL)canBecomeKeyWindow {
return YES;
}
Esto funcionó para mí.
Resulta que al azar encontré la solución, que ahora publicaré para la posteridad ...
La vista que se usa como hoja (NSWindow o NSPanel) necesita tener una barra de título. Tan pronto como activé esto en el inspector de Interface Builder (ventana → Apariencia → casilla de verificación de la barra de título), volví a compilar y NSTextFields resaltó, etiquetó y aceptó la entrada como lo haría en cualquier otra vista. No estoy seguro de por qué la barra de título hace la diferencia, pero ahí lo tiene.