Question iPhone UITextField - Modifier la couleur du texte de l'espace réservé


Je voudrais changer la couleur du texte d’espace réservé UITextField contrôles, pour le rendre noir.

Je préférerais faire cela sans utiliser de texte normal comme espace réservé et avoir à remplacer toutes les méthodes pour imiter le comportement d'un espace réservé.

Je crois que si je remplace cette méthode:

- (void)drawPlaceholderInRect:(CGRect)rect

alors je devrais pouvoir faire ceci. Mais je ne sais pas comment accéder à l'objet fictif réel à partir de cette méthode.


502
2017-08-27 10:36


origine


Réponses:


Depuis l'introduction des chaînes attribuées dans UIViews dans iOS 6, il est possible d'attribuer une couleur au texte de l'espace réservé comme ceci:

if ([textField respondsToSelector:@selector(setAttributedPlaceholder:)]) {
  UIColor *color = [UIColor blackColor];
  textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:placeholderText attributes:@{NSForegroundColorAttributeName: color}];
} else {
  NSLog(@"Cannot set placeholder text's color, because deployment target is earlier than iOS 6.0");
  // TODO: Add fall-back code to set placeholder color.
}

767
2017-12-04 03:08



Facile et sans douleur, pourrait être une alternative facile pour certains.

_placeholderLabel.textColor

Non recommandé pour la production, Apple peut refuser votre soumission.


226
2018-02-25 14:28



Vous pouvez remplacer drawPlaceholderInRect: (CGRect) rect en tant que tel pour afficher manuellement le texte de l'espace réservé:

- (void) drawPlaceholderInRect:(CGRect)rect {
    [[UIColor blueColor] setFill];
    [[self placeholder] drawInRect:rect withFont:[UIFont systemFontOfSize:16]];
}

190
2017-08-03 11:35



Peut-être que vous voulez essayer de cette façon, mais Apple peut vous avertir de l'accès à ivar privé:

[self.myTextField setValue:[UIColor darkGrayColor] 
                forKeyPath:@"_placeholderLabel.textColor"];

REMARQUE
Cela ne fonctionne plus sur iOS 7, selon Martin Alléus.


156
2018-01-04 07:53



Vous pouvez modifier la couleur du texte fictif à la couleur de votre choix en utilisant le code ci-dessous.

UIColor *color = [UIColor lightTextColor];
YOURTEXTFIELD.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"PlaceHolder Text" attributes:@{NSForegroundColorAttributeName: color}];

152
2017-11-08 06:18



Cela fonctionne dans Swift <3.0:

myTextField.attributedPlaceholder = 
NSAttributedString(string: "placeholder text", attributes: [NSForegroundColorAttributeName : UIColor.redColor()])

Testé dans iOS 8.2 et iOS 8.3 beta 4.

Swift 3:

 myTextfield.attributedPlaceholder =
  NSAttributedString(string: "placeholder text", attributes: [NSForegroundColorAttributeName : UIColor.red])

102
2018-01-06 11:50



Dans Swift:

if let placeholder = yourTextField.placeholder {
    yourTextField.attributedPlaceholder = NSAttributedString(string:placeholder, 
        attributes: [NSForegroundColorAttributeName: UIColor.blackColor()])
}

Dans Swift 4.0:

if let placeholder = yourTextField.placeholder {
    yourTextField.attributedPlaceholder = NSAttributedString(string:placeholder, 
        attributes: [NSAttributedStringKey.foregroundColor: UIColor.black])
}

60
2017-12-11 16:22



Ce qui suit uniquement avec iOS6 + (comme indiqué dans le commentaire d'Alexander W):

UIColor *color = [UIColor grayColor];
nameText.attributedPlaceholder =
   [[NSAttributedString alloc]
       initWithString:@"Full Name"
       attributes:@{NSForegroundColorAttributeName:color}];

43
2018-05-19 06:33