Por NSWindow sem styleMask: NSTitledWindowMask não pode ser keyWindow?

Problema: Eu tenho uma janela mainWindow e outra childWindow adicionadas à mainWindow . childWindow é uma espécie de class WindowExt . Esta class eu defino para chamar o método catch [NSWindow becomeKeyWindow] que deve ser chamado após [childWindow makeKeyWindow] . Se eu criar childWindow e tentar torná-lo keyWindow no próximo caminho:

 WindowExt *childWindow = [[WindowExt alloc] initWithContentRect:addedWindowRect styleMask:NSBorderlessWindowMask | NSTitledWindowMask backing:NSBackingStoreBuffered defer:NO]; [mainWindow addChildWindow:childWindow ordered:NSWindowAbove]; [childWindow makeKeyWindow]; 

O método [WindowExt becomeKeyWindow] para childWindow é chamado – all fine, childWindow se torna keyWindow.

Mas se eu criar o childWindow como

 WindowExt *childWindow = [[WindowExt alloc] initWithContentRect:addedWindowRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO]; [mainWindow addChildWindow:childWindow ordered:NSWindowAbove]; [childWindow makeKeyWindow]; 

sem NSTitledWindowMask , [WindowExt becomeKeyWindow] para childWindow nunca é chamado – childWindow não se torna keyWindow.

Essa é uma decisão de design do Cocoa: por padrão, as janelas sem título ou barra de redimensionamento não podem se tornar janelas principais .

Se você quiser que uma janela sem título possa se tornar uma janela-chave, será necessário criar uma subclass de NSWindow e replace -canBecomeKeyWindow seguinte maneira:

 - (BOOL)canBecomeKeyWindow { return YES; } 

você pode definir a máscara de estilo para NSBorderlessWindowMask , a fim de torná-lo sem fronteiras