cocoa - ¿Por qué NSWindow sin styleMask: NSTitledWindowMask no puede ser keyWindow?
macos (2)
Problema: tengo una ventana mainWindow y otra childWindow
añadidas a mainWindow
. childWindow es una especie de clase WindowExt
. Esta clase I define para llamar al método catch [NSWindow becomeKeyWindow]
que debe [childWindow makeKeyWindow]
después de [childWindow makeKeyWindow]
. Si creo childWindow e intento convertirlo en keyWindow de la siguiente manera:
WindowExt *childWindow = [[WindowExt alloc] initWithContentRect:addedWindowRect
styleMask:NSBorderlessWindowMask | NSTitledWindowMask
backing:NSBackingStoreBuffered
defer:NO];
[mainWindow addChildWindow:childWindow ordered:NSWindowAbove];
[childWindow makeKeyWindow];
método [WindowExt becomeKeyWindow]
para childWindow
se llama - todo bien, childWindow
convierte en keyWindow.
Pero si creo childWindow como
WindowExt *childWindow = [[WindowExt alloc] initWithContentRect:addedWindowRect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
[mainWindow addChildWindow:childWindow ordered:NSWindowAbove];
[childWindow makeKeyWindow];
sin NSTitledWindowMask
, [WindowExt becomeKeyWindow]
para childWindow
nunca se llama - childWindow
no se convierte en keyWindow.
Esa es una decisión de diseño de Cocoa: las ventanas sin título o la barra de cambio de tamaño no pueden convertirse en ventanas clave de forma predeterminada .
Si desea que una ventana sin título pueda convertirse en una ventana de clave, debe crear una subclase de NSWindow
y reemplazar -canBecomeKeyWindow
siguiente manera:
- (BOOL)canBecomeKeyWindow {
return YES;
}
puede establecer la máscara de estilo en NSBorderlessWindowMask
para que sea sin NSBorderlessWindowMask