239 votes

Modifier la couleur du curseur / caret de UITextField et UITextView

Je m'interroge sur la possibilité de changer la couleur du curseur/caractère dans un fichier de type UITextField (Et UITextView si c'est la même réponse) dans iOS. J'ai vu des réponses pour le développement OSX, mais rien pour iOS.

Est-ce que c'est possible ?

1 votes

Réponse détaillée pour UITextField y compris la manière de procéder dans Interface Builder, à l'adresse suivante stackoverflow.com/a/18759577/1709587

1 votes

Réponse simple et complète à stackoverflow.com/a/18945907/1292230 ;)

555voto

DiscDev Points 8087

Si vous visez iOS 7+, cela a été rendu beaucoup plus facile. Il suffit de modifier le tintColor du champ avec un curseur en utilisant le proxy d'apparence et il s'appliquera dans toute l'application :

Swift 3.0 :

UITextField.appearance().tintColor = .black 

Objective-C :

[[UITextField appearance] setTintColor:[UIColor blackColor]];

La même réponse s'applique à un individu UITextField :

Swift 3.0 :

myTextField.tintColor = .black 

Objectif-C

[myTextField setTintColor:[UIColor blackColor]];

13 votes

J'ai constaté que les couleurs de teinte des éléments UIBarButton étaient fixées à leur valeur par défaut, même si je définissais une couleur de teinte totalement différente. J'ai résolu le problème en définissant la couleur de teinte des UITextFields individuellement lorsqu'ils sont créés.

0 votes

Cela fonctionne, mais seulement si vous le faites dans didFinishLaunching ? Ou pouvez-vous le faire en fonction de l'interaction de l'utilisateur, par exemple en appuyant sur un bouton ?

0 votes

@SteffenAndersen il devrait se comporter conformément à la documentation de l'API proxy UIAppearance.

45voto

Cap Points 471

Avec iOS7, vous pouvez simplement changer la tintColor du textField.

13voto

Dov Points 126

Remarque : cette réponse est périmée et ne doit être utilisée que pour les développements antérieurs à iOS 7. Voir les autres réponses pour une solution en 1 ligne utilisant le proxy d'apparence dans iOS 7.

Je suis arrivé à cette question après avoir été confronté au même problème dans un projet sur lequel je travaillais.

J'ai réussi à créer une solution qui sera acceptée par l'équipe de révision de l'AppStore car elle n'utilise aucune API privée existante.

J'ai créé un contrôle appelé DGTextField qui étend UITextField.

0 votes

C'est génial. Honnêtement, à cause de cela, je vais certainement garder un œil plus attentif sur "Conforme à" dans les documents. Cependant, je suis heureux qu'une seule personne ait eu à passer du temps à lire et à bricoler sur ce sujet. J'espère que d'autres personnes seront en mesure de voir et d'utiliser cela !

0 votes

Cependant, je pourrais recommander des options d'animation, en supprimant l'@propery et en créant simplement des setters et des getters ainsi qu'un setter et un getter pour la largeur personnalisée du caret. Vous n'êtes peut-être pas intéressé, mais j'aime toujours les petits ajustements !

0 votes

@RileyE Je suis heureux que vous ayez pu bénéficier de ma solution. N'hésitez pas à forker le repo et à ajouter les modifications que vous souhaitez partager.

3voto

arnekolja Points 442

Une approche plus générale consisterait à définir la tintColor de l'apparence de l'UIView.

UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];

C'est logique si vous utilisez de nombreux éléments d'interface utilisateur par défaut.

2 votes

Hmmm... cela a beaucoup d'autres effets secondaires... la question porte uniquement sur le changement de la couleur du caret, et votre réponse va teinter chaque UIView de l'application... ce n'est probablement pas l'approche que la plupart des gens veulent adopter.

0 votes

+1 sur ce point, trop d'effets secondaires, si le but est juste de changer la couleur du signe d'insertion. La définition de UIView tintColor EST utile lorsque vous styliser un conteneur (mais alors je n'utiliserais pas [UIView appearance]

1voto

Max Ballo Points 728

Cela n'est possible qu'en accédant à une propriété privée et peut donc entraîner un rejet de l'application de l'AppStore d'Apple.

Jetez un coup d'œil à cette question Stackoverflow

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X