Changer la couleur du placeholder d'un UITextField
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 !