web-dev-qa-db-fra.com

Changer la couleur du texte de l'espace réservé de UITextField par programme

J'ai un UITextField avec un espace réservé. Lorsque l'utilisateur souhaite soumettre le formulaire et qu'il/elle n'a pas tapé dans le champ de texte, je souhaite que la couleur du texte de l'espace réservé devienne rouge. Voici mes questions:

  • Est-ce que cela irait à l'encontre des directives de l'interface utilisateur d'Apple? Je ne veux pas que mon application soit rejetée à cause de ces petits détails.
  • Comment je le ferais?

Je sais que je peux remplacer la méthode drawPlaceholderInRect: dans une sous-classe de UITextField. Mais si je le faisais, le texte serait toujours rouge et, comme je l'ai écrit auparavant, j'aimerais qu'il devienne rouge en fonction d'une action définie par l'utilisateur.

La seule solution à laquelle je peux penser est d'utiliser un texte "par défaut" pour mon UITextField (le texte de l'espace réservé), de l'afficher en gris clair tant que l'utilisateur n'a pas saisi quoi que ce soit et de l'afficher en rouge lorsque j'en ai besoin. En d'autres termes, je voudrais simplement me moquer du comportement de l'espace réservé. Mais bien sûr, ce n'est pas très élégant.

Des idées?

15
strave

quand l'utilisateur n'écrit rien dans textfield. puis mettez ce texte en tant que texte textfield.text et changez la couleur de la police.

2
Ron

Il suffit de regarder ceci:

Digdog Dig - Change la couleur de l’espace réservé de UITextField sans la sous-classer

[self.MyTextField setValue:[UIColor darkGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
48
verklixt

Vous pouvez modifier la couleur du texte d'espace réservé en n'importe quelle couleur à l'aide du code ci-dessous. Essayez ceci.

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

comme la réponse de verklixt mais sans accéder à une API privée ni utiliser UIAppearance:

[[UILabel appearanceWhenContainedIn:[UITextField class], nil] setTextColor:[UIColor darkGrayColor]];

(testé sur les versions 5.0 à 7.1)

12
glasz

Vous pouvez définir le texte d’espace réservé comme chaîne NSAttributedString à l’aide de this property

NSAttributedString *coloredPlaceholder = [[NSAttributedString alloc] initWithString:@"I     am a placeholder string" attributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];
[self.textField setAttributedPlaceholder:coloredPlaceholder];
5
Matt

Nous pouvons accéder à l’étiquette d’emplacement réservé à l’aide de la clé path afin de pouvoir changer de couleur, c.-à-d.:

[self.textField setValue:[UIColor **"your color"**] 
                                  forKeyPath:@"_placeholderLabel.textColor"];
5
Eshwar Chaitanya

passer outre

-(void) drawPlaceholderInRect:(CGRect)rect {
    [[UIColor darkGrayColor] setFill];
    [[self placeholder] drawInRect:rect withFont:[UIFont fontWithName:@"Helvetica-Oblique" size:15.0]];
}
4
harshalb

J'ai eu quelques difficultés à mettre en œuvre le changement de couleur de l'espace réservé. J'ai plutôt trouvé une autre solution qui fonctionne parfaitement pour moi. 

//On button action change color to red
-(void)btnAction
{
    // authentication for missing textfields
    if ([textField_firstName.text isEqualToString:@""])
    {
        textField_firstName.textColor=[UIColor redColor];
        textField_firstName.text=@"Enter First Name";
    }
}

// in the delegate method of UITextField change the following 
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    //match the following string with above string and change the string to empty string on textfield click
    if ([textField_firstName.text isEqualToString:@"Enter First Name" ]) 
    {
        textField_firstName.text=@"";
    }

    //change back to the text color you use
    textField_firstName.textColor=[UIColor blackColor];
}
0
Arshad Parwez