Changer la couleur du placeholder d'un UITextField

Cet article est libre d'accès pour tous grâce à ceux qui soutiennent notre blog indépendant.

Petite astuce concernant les couleurs dans vos interfaces iOS ce matin, car en bossant sur mon projet de fin d’année, je me suis justement retrouvé confronté à ce problème de design.

Pour vous dépeindre vite fait les choses, je suis en charge de la création de l’application iOS d’un service de stockage de données dans le cloud (dropbox en gros). Il y aura à la fin un client web, un client desktop, un client Android et un client iOS.

Donc, lors de la confection de cette application tôt ce matin j’ai eu besoin de changer la couleur du placeholder d’un UITextField pour le passer au blanc. Malheur à moi d’avoir voulu faire ça car s’il est bien connu qu’un UITextField est très simple d’utilisation (une methode dédiée au changement de chaque propriété) pour le placeholder ce n’est pas le cas ! J’aurais aimé une méthode - (void)setPlaceholderColor:(UIColor*)color;

J’ai fait pas mal de recherches et seulement 2 techniques simples ressortent : on peut hériter de UITextField et modifier la méthode - (void)drawPlaceholderInRect:(CGRect)rect;. On ne verra pas cette méthode que je trouve encore trop complexe pour ce que je voulais faire.

Modifier la couleur du placeholder sans surcharger UITextField

La deuxième méthode consiste à utiliser - (void)setAttributedPlaceholder:(NSAttributedString*) string; au lieu du - (void)setPlaceholder:(NSString*)placeholder; habituel.

Voici le code explicatif qui vous permettra aussi de comprendre pourquoi j’aurais préféré changer la couleur avec une méthode séparée :

self.defaultColor = [UIColor colorWithRed:0.204 green:0.286 blue:0.369 alpha:1];

[[self textfield] setAttributedPlaceholder:[[NSAttributedString alloc] initWithString:NSLocalizedString(@"app.loginview.mail.placeholder", @"Indique à l'utilisateur que ...") attributes:@{NSForegroundColorAttributeName:[self defaultColor]}]];

Pas très lisible donc. Pour alléger le code j’ai pensé à ça :

self.defaultColor = [UIColor colorWithRed:0.204 green:0.286 blue:0.369 alpha:1];
self.placeholder = NSLocalizedString(@"app.loginview.mail.placeholder", @"Indique a l'utilisateur que...");

[[self textfield] setAttributedPlaceholder:[[NSAttributedString alloc] initWithString:self.placeholder attributes:@{NSForegroundColorAttributeName:self.defaultColor}]];

Mais bon, au final ça revient au même. A vous de choisir donc !

Rejoins 250+ développeurs de notre liste de diffusion et sois reçois les articles directement dans ta boite mail.

S'inscrire à la newsletter

Aucun spam. Désabonnes-toi en un seul clic à tout moment.

Si vous avez des questions ou des remarques/conseils, n'hésitez pas à laisser un commentaire plus bas ! Je serais ravis de vous lire. Et si vous aimez l'article, n'oubliez pas de le partager avec vos amis.