web-dev-qa-db-fra.com

Changer les couleurs UITextField et UITextView Cursor/Caret

Je me demande si vous souhaitez changer la couleur du curseur/curseur dans un 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 seulement possible?

194
RileyE

Si vous ciblez iOS 7+, cela a été rendu beaucoup plus facile. Changez simplement la teinteCouleur du champ avec un curseur en utilisant le proxy d’apparence et elle s’appliquera dans l’application:

Swift 3.0:

UITextField.appearance().tintColor = .black 

Objectif c:

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

La même réponse s'applique à une UITextView individuelle:

Swift 3.0:

myTextField.tintColor = .black 

Objectif c

[myTextField setTintColor:[UIColor blackColor]];
461
DiscDev

Avec iOS7, vous pouvez simplement changer la teinteCouleur du champ de texte

43
Cap

Swift 3:

  UITextField.appearance().tintColor = UIColor.black
  UITextView.appearance().tintColor = UIColor.black
17
Peter Kreinz

Remarque: Cette réponse est obsolète et doit être utilisée uniquement pour le développement pré-iOS 7. Voir autres réponses pour une solution 1 ligne utilisant le proxy d'apparence dans iOS 7.

Je suis arrivé à cette question après avoir affronté le 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.

13
Dov
yourTextField.tintColor = [UIColor whiteColor];

Cela fonctionne si vous le définissez dans le code, car le déclencheur color ne le fait pas dans Interface Builder (Xcode 6.1.1). Cela convenait bien sans qu'il soit nécessaire de changer de proxy d'apparence.

11
David

Définir tintColor pour UITextField et UITextView fonctionne différemment . Alors que pour UITextField, vous n'avez pas besoin d'appeler du code supplémentaire après la mise à jour de tintColor pour changer la couleur du curseur, mais pour UITextView, vous avez besoin.

Ainsi, après avoir défini tintColor pour UITextView (que ce soit dans IB ou dans le code), vous devez appeler textView.tintColorDidChange() pour l'appliquer (en fait, la configuration de la vue texte sera transmise à sa hiérarchie de sous-vues).

5
ilya

Cela a fonctionné pour moi à Swift:

UITextField.tintColor = UIColor.blackColor()

Vous pouvez également définir ceci dans le storyboard: https://stackoverflow.com/a/18759577/3075340

4
Micro

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

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

Cela a du sens si vous utilisez plusieurs éléments d'interface utilisateur par défaut.

3
arnekolja

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

jetez un oeil à cette question Stackoverflow

1
Max Ballo

Essayez, ça marche pour moi.

[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];
1
Durgesh

Swift 4

Dans viewDidLoad (), appelez simplement le code ci-dessous:

EXEMPLE DE CODE

//txtVComplaint is a textView

txtVComplaint.tintColor = UIColor.white

txtVComplaint.tintColorDidChange()
0
Md Shamshad Akhtar

L'approche de Durgesh fonctionne.

J'ai aussi souvent utilisé de telles solutions KVC… __. Malgré que cela semble être non documenté, mais cela fonctionne. Franchement, vous n’utilisez ici aucune méthode privée, mais uniquement un codage clé-valeur qui est légal.

P.S. Hier, ma nouvelle application est apparue sur l'AppStore sans aucun problème avec cette approche. Et ce n'est pas le premier cas lorsque j'utilise KVC pour modifier certaines propriétés en lecture seule (telles que navigatonBar) ou des propriétés privées.

0
malex

Je pense que si vous voulez des couleurs personnalisées, vous pouvez aller dans le dossier Assets.xcassets, cliquer avec le bouton droit de la souris et sélectionner New Color Set, une fois que vous avez créé la couleur que vous avez définie, nommez-la pour la réutiliser.

Et vous pouvez l'utiliser comme ça:

import UIKit 

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        UITextField.appearance().tintColor = UIColor(named: "YOUR-COLOR-NAME")  #here
    }
}

Testé sur macOS 10.15/iOS 13/Swift 5

0
rust

Pour la version d'Interface Builder avec Swift

@IBOutlet weak var tvValue: UITextView! {
        didSet {
            tvValue.tintColor = .black
        }
    }
0
Mike Glukhov

Si UITextField provient de UISearchBar, commencez par obtenir textField de searchBar, puis appliquez la propriété tintColor:

let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray
0
Nilesh Pol