cocoadev proporciona más detalles sobre la mejor manera de implementar su propia subclase NSWindow
, completa con una descripción de la mayoría de las trampas comunes.
Lo esencial de esto es crear una subclase de NSWindow
y establezca su styleMask
a NSBorderlessWindowMask
en el método init:
- (id) initWithContentRect: (NSRect) contentRect
styleMask: (unsigned int) aStyle
backing: (NSBackingStoreType) bufferingType
defer: (BOOL) flag
{
if ((self = [super initWithContentRect: contentRect
styleMask: NSBorderlessWindowMask
backing: bufferingType
defer: flag]) == nil) { return nil; }
[super setMovableByWindowBackground:YES];
[super setLevel:NSNormalWindowLevel];
[super setHasShadow:YES];
// etc.
return self;
}
Tenga en cuenta que probablemente debería volver SÍ para canbecomeKeyWindow
con el fin de hacer que su comportan ventana como una ventana normal.
- (BOOL) canBecomeKeyWindow
{
return YES;
}
A continuación, puede crear una costumbre NSView subclase, llenar la ventana con una instancia de dicha clase, y luego realizar la totalidad de la ventana apropiada dibujo dentro de esa vista personalizada.
Todo esto puede ser un poco doloroso. Deberá volver a implementar la mayoría de los comportamientos normales de la ventana, como cambiar el tamaño arrastrando la esquina inferior derecha.
Gracias, Leibowitzn. ¿Puede proporcionar más detalles sobre cómo configurar NSTextField? ¿Cómo configuro su marco para que esté colocado correctamente en la ventana y en dónde en mi código sería el mejor lugar para hacer esto? – sam
FWIW, lo hice en el método awakeFromNib del controlador de la aplicación. Posicione el marco del campo de texto en relación con el marco de la ventana. Probablemente esta no sea la mejor manera de hacerlo, pero usé notificaciones para saber cuándo la ventana se convierte en/renuncia a la ventana principal y lo usé para cambiar el color del texto. Gracias otra vez por la idea. – sam