Pregunta

¿Es posible utilizar una imagen como fondo para un campo de texto en Cocoa? Si es así, ¿cómo?

¿Fue útil?

Solución

No sé si esta es la manera "correcta" de hacerlo, pero la primera cosa que viene a la mente sería hacer una subclase personalizada de NSTextField, que puede lucir más o menos así:

- (void)awakeFromNib
{
    [self setDrawsBackground:NO];
}

- (void)drawRect:(NSRect)rect
{
    [super drawRect:rect];

    [self lockFocus];
    [[NSImage imageNamed:@"<#image filename#>"] drawInRect:rect
        fromRect:rect
        operation:NSCompositeSourceOver
        fraction:1.0];
    [self unlockFocus];
}

Una vez más, eso es simplemente un esquema aproximado de las partes esenciales.

De todas formas, como he dicho, no estoy seguro de si esto realmente la forma "correcta" de hacerlo (o si hay incluso una manera "correcta", para el caso), pero esto le dará una imagen de fondo para su NSTextField.

Editar en respuesta al comentario de Joshua (no voy a tener suficiente espacio en esa pequeña caja de comentarios poco):

Para añadir la imagen en su proyecto, que le arrastra desde donde quiera que esté en la ventana de proyecto (la lista principal de archivos en el medio de la ventana del proyecto, aunque dependiendo de cómo se haya configurado su edición de Xcode medio ambiente, esto podría ser diferente para usted).

Con el fin de subclase NSTextField, que se quiere crear un nuevo archivo de clase Objective-C (Archivo -> Nuevo archivo ...), pero editar el encabezado para que la clase hereda de NSTextField en lugar de NSObject. En otras palabras, el archivo de cabecera podría tener este aspecto:

#import <Cocoa/Cocoa.h>

@interface BGImageTextField : NSTextField
{
}

@end

En cuanto al resto del código, que le gustaría añadir que en el cuerpo principal del archivo de aplicación (BGImageTextField.m, por ejemplo), específicamente en las palabras clave entre @implementation y @end.

También me gustaría mencionar dos cosas. En primer lugar, me gustaría recomendar recoger una copia de Programación Cocoa para Mac OS X , por Aaron Hillegass-que cubre la mayor parte de los fundamentos de cacao que simplemente se pasaron, y es una de las mejores formas de aprender Cacao en general. En segundo lugar, aunque mi enfoque funciona, probablemente no es el mejor enfoque , que parece apuntar a una mejor forma de extender NSTextField.

Otros consejos

En lugar de la subclasificación NSTextField, simplemente hacer que el color de fondo transparente [NSColor clearColor] y poner la imagen detrás de él.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top