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?
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]];
Avec iOS7, vous pouvez simplement changer la teinteCouleur du champ de texte
Swift 3:
UITextField.appearance().tintColor = UIColor.black
UITextView.appearance().tintColor = UIColor.black
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.
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.
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).
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
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.
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.
Essayez, ça marche pour moi.
[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor redColor] strong textforKey:@"insertionPointColor"];
Swift 4
Dans viewDidLoad (), appelez simplement le code ci-dessous:
EXEMPLE DE CODE
//txtVComplaint is a textView
txtVComplaint.tintColor = UIColor.white
txtVComplaint.tintColorDidChange()
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.
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
Pour la version d'Interface Builder avec Swift
@IBOutlet weak var tvValue: UITextView! {
didSet {
tvValue.tintColor = .black
}
}
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