Comment pouvez-vous utiliser une image comme arrière-plan pour un champ de texte dans Cocoa?

StackOverflow https://stackoverflow.com/questions/765104

  •  12-09-2019
  •  | 
  •  

Question

Est-il possible d'utiliser une image comme arrière-plan pour un champ de texte à Cocoa? Si oui, comment?

Était-ce utile?

La solution

Je ne sais pas si cela est la façon de le faire, mais la première chose « correcte » qui vient à l'esprit serait de faire une sous-classe personnalisée de NSTextField, ce qui pourrait ressembler à peu près comme ceci:

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

Encore une fois, c'est un aperçu juste rugueux des pièces essentielles.

De toute façon, comme je l'ai dit, je ne sais pas si ce vraiment la « bonne » façon de le faire (chemin ou s'il y a même une « bonne », d'ailleurs), mais cela vous donnera une image d'arrière-plan pour votre NSTextField.

Modifier en réponse au commentaire de Joshua (je ne vais pas avoir assez de place dans cette boîte minuscule commentaire):

Pour ajouter l'image dans votre projet, vous souhaitez le faire glisser de là où il est dans la fenêtre du projet (la liste principale des fichiers au milieu de la fenêtre du projet, bien que selon la façon dont vous avez configuré votre édition Xcode environnement, cela pourrait être différent pour vous).

Pour sous-classe NSTextField, vous voulez créer un nouveau fichier de classe Objective-C (Fichier -> Nouveau fichier ...), mais modifier l'en-tête de sorte que la classe hérite de NSTextField au lieu de NSObject. En d'autres termes, votre fichier d'en-tête pourrait ressembler à ceci:

#import <Cocoa/Cocoa.h>

@interface BGImageTextField : NSTextField
{
}

@end

En ce qui concerne le reste du code, vous voulez ajouter que dans le corps principal du fichier de mise en œuvre (BGImageTextField.m, par exemple), en particulier entre les mots-clés @implementation et @end.

Je voudrais aussi mentionner deux choses. Tout d'abord, je vous recommande de ramasser une copie de Programmation Cocoa pour Mac OS X , par Aaron Hillegass-il couvre la plupart des bases de cacao que je suis juste allé sur, et est l'une des meilleures façons de apprendre le cacao en général. En second lieu, bien que mon approche fonctionne, il est probablement pas la meilleure approche depuis surtout que je viens récemment trouvé ce poste , ce qui semble faire allusion à une meilleure façon d'étendre NSTextField.

Autres conseils

Au lieu de sous-classement NSTextField, juste rendre la couleur d'arrière-plan transparent [NSColor clearColor] et de mettre l'image derrière.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top