Domanda

E 'possibile utilizzare un'immagine come sfondo per un campo di testo in Cocoa? Se sì, come?

È stato utile?

Soluzione

Non so se questo è il modo "corretto" per farlo, ma la prima cosa che viene in mente sarebbe quello di fare una sottoclasse personalizzata di NSTextField, che potrebbe apparire più o meno in questo modo:

- (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];
}

Ancora una volta, questo è un profilo solo approssimativa delle parti essenziali.

In ogni modo, come ho detto, non sono sicuro se questo il modo in cui realmente "corretto" per farlo (o se c'è anche un modo "corretto", è per questo), ma questo vi darà un'immagine di sfondo per la vostra NSTextField.

Modifica in risposta al commento di Joshua (non ho intenzione di avere abbastanza spazio in quel piccolo casella di commento):

Per aggiungere l'immagine nel vostro progetto, che ci si trascina da dovunque sia nella finestra del progetto (l'elenco principale delle file al centro della finestra del progetto, anche se a seconda di come hai impostato il tuo editing Xcode ambiente, questo potrebbe essere diverso per te).

Al fine di creare una sottoclasse NSTextField, si vorrebbe creare un nuovo file di classe Objective-C (File -> Nuovo file ...), ma modificare l'intestazione in modo che la classe eredita da NSTextField invece di NSObject. In altre parole, il file di intestazione potrebbe essere simile a questo:

#import <Cocoa/Cocoa.h>

@interface BGImageTextField : NSTextField
{
}

@end

Per quanto riguarda il resto del codice, si vorrebbe aggiungere che nel corpo principale del file di implementazione (BGImageTextField.m, per esempio), in particolare tra i @implementation e @end parole chiave.

Vorrei anche menzionare due cose. In primo luogo, mi consiglia di prendere una copia di Cocoa Programming for Mac OS X , di Aaron Hillegass-copre la maggior parte delle nozioni di base di cacao che ho appena andato oltre, ed è uno dei migliori modi per imparare cacao in generale. In secondo luogo, anche se il mio approccio funziona, probabilmente non è il miglior approccio, soprattutto perché ho appena trovato questo post , che sembra suggerire un modo migliore di estendere NSTextField.

Altri suggerimenti

Invece di sottoclassi NSTextField, basta fare il colore di sfondo trasparente [NSColor clearColor] e mettere l'immagine dietro di esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top