Frage

Ist es möglich, ein Bild als Hintergrund für ein Textfeld in Cocoa zu benutzen? Wenn ja, wie?

War es hilfreich?

Lösung

Ich weiß nicht, ob dies der „richtige“ Weg, es zu tun, aber das erste, was wäre, um eine benutzerdefinierte Unterklasse von NSTextField kommt in den Sinn zu machen, was in etwa wie folgt aussehen:

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

Auch das ist eine nur grobe Skizze der wesentlichen Teile.

Wie auch immer, wie ich schon sagte, ich bin nicht sicher, ob dies wirklich die „richtige“ Art und Weise, es zu tun (oder wenn es sogar eine „richtige“ Art und Weise, was das betrifft), aber dies werden Ihnen ein Hintergrundbild für Ihre NSTextField.

Edit als Antwort auf Joshuas Kommentar (Ich werde nicht genug Platz in diesem winzig kleinen Kommentarfeld haben):

das Bild in einem Projekt hinzuzufügen, werden Sie sie ziehen aus, wo immer es ist in das Projektfenster (die Hauptliste der Dateien in der Mitte des Projektfensters, obwohl je nachdem, wie Sie auf Ihre Xcode Bearbeitung festgelegt haben Umwelt, könnte dies für Sie anders sein).

Um NSTextField zu Unterklasse, würden Sie eine neue Objective-C-Klasse-Datei (Datei -> Neue Datei ...) erstellen mögen, aber die Kopfzeile bearbeiten, so dass die Klasse von NSTextField erbt statt NSObject. Mit anderen Worten, könnte Ihre Header-Datei wie folgt aussehen:

#import <Cocoa/Cocoa.h>

@interface BGImageTextField : NSTextField
{
}

@end

Wie für den Rest des Codes, würden Sie, dass in dem Hauptkörper der Implementierungsdatei (BGImageTextField.m, zum Beispiel), und zwar zwischen den @implementation und @end Keywords hinzufügen mögen.

Ich würde auch zwei Dinge zu erwähnen. Zuerst würde ich empfehlen, eine Kopie des Aufnehmens Cocoa Programming for Mac OS X von Aaron Hillegass-es deckt den größten Teil der Kakaogrundlagen, die ich über nur ging, und ist eine der besten Möglichkeiten, um lernen Cocoa im allgemeinen. Zweitens, obwohl mein Ansatz funktioniert, dann ist es wahrscheinlich nicht der beste Ansatz-zumal ich erst vor kurzem gefunden diesen Beitrag , die zu einem besseren Weg erstreckt NSTextField zu andeuten scheint.

Andere Tipps

Statt Subklassen NSTextField, machen nur die Hintergrundfarbe transparent [NSColor Clear] und setzt das Bild dahinter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top