2012-06-20 4 views
34

Je crée transparentNSTextFieldNSTextField fond transparent

self.myTextField = [[NSTextField alloc] initWithFrame:CGRectMake(backgroundView.frame.origin.x + backgroundView.frame.size.width + 20, self.projectTitle.frame.origin.y - 30.0, 100, 20)]; 
self.myTextField.editable = NO; 
self.myTextField.bezeled = NO; 
self.myTextField.drawsBackground = YES; 
self.myTextField.backgroundColor = [NSColor clearColor]; 
self.myTextField.selectable = NO; 
self.myTextField.font = [NSFont fontWithName:@"Helvetica Neue" size:16]; 

    [self addSubview:self.compressingTime]; 

Et regardez comme un texte de mauvais résultat. enter image description here Si je mets la couleur d'arrière-plan

self.myTextField.backgroundColor = [NSColor colorWithCalibratedRed:0.85 green:0.85 blue:0.85 alpha:1.0]; 

tout semble ok enter image description here J'ai aussi essayé avec drawsBackground = NO;-vous les gars savent comment résoudre ce problème?

+0

Que voulez-vous dire "mauvaise image"? Cela me semble bon? – Vervious

+0

@Vervious Sur la deuxième img, il semble que l'antialiasing soit activé, la police sur le premier img est robuste. – pawelropa

+0

Oh, je vois ça maintenant. – Vervious

Répondre

-2

J'ai fini par utiliser CATextLayer au lieu de NSTextField.

-2

La couleur claire rendra la vue en cours (ie) l'arrière-plan de NSTextView transparent, d'où la couleur de NSView qui contient NSTextView est visible.

+0

Désolé ce n'est pas ça. – pawelropa

53

Le secret met tous les trois de ces propriétés sur le NSTextField ...

myTextField.bezeled   = NO; 
myTextField.editable  = NO; 
myTextField.drawsBackground = NO; 
+2

Ça ne marche toujours pas pour moi. –

+0

Merci, fonctionne parfaitement pour modifier le code Apple pour le remplissage par programme d'un NSTableView –

+0

cela ne fonctionne que si le calque de la superview a une couleur de fond solide. @ZsoltSzatmari – mrabin

-1

Vous ne devez pas passer à CATextLayer de dire efficacement votre application à utiliser des couches pour le champ de texte. Vous pouvez simplement utiliser ceci à la place:

textField.drawsBackground = NO; 
textField.wantsLayer  = YES; 
-2

J'ai eu ce problème juste maintenant. Je l'ai corrigé par en supprimant une propriété nommée backgroundColor de la vue d'ensemble de NSTextField. J'utilisais backgroundColor juste comme un getter/setter de commodité pour les propriétés CALayer sur une sous-classe NSView. Bien que cette propriété ne soit pas documentée sur NSView, il semble que j'ai accidentellement remplacé une propriété sur NSView.

OK pour la sous-classe!

6

Il y a une propriété dans le fichier .xib, sur la fenêtre du générateur d'interface pour le champ de texte, sous inspecteur d'attributs

  1. Vérifiez l'affichage Dessine Contexte
  2. Sélectionnez une couleur d'arrière-plan. Sélectionnez une couleur claire pour un arrière-plan transparent.

enter image description here

+0

Correction de mon problème par Draws Background vérifié et définir la couleur d'arrière-plan pour effacer la couleur –

2

À partir de 10.12, vous pouvez juste faire:

let label = NSTextField(labelWithString: "HELLO")