Je me demande de 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?
Je me demande de 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?
Réponses:
Si vous ciblez iOS 7+, cela a été rendu beaucoup plus facile. Changez simplement letintColor
le champ avec un curseur à l'aide du proxy d'apparence et cela s'appliquera dans toute l'application:
Swift 3.0:
UITextField.appearance().tintColor = .black
Objectif c:
[[UITextField appearance] setTintColor:[UIColor blackColor]];
La même réponse s'applique pour un individu UITextField
:
Swift 3.0:
myTextField.tintColor = .black
Objectif c
[myTextField setTintColor:[UIColor blackColor]];
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 les autres réponses pour une solution 1 ligne utilisant le proxy d'apparence dans iOS 7.
Je suis arrivé à cette question après avoir rencontré 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 de couleur ne le fait pas dans l'Interface Builder (Xcode 6.1.1). Il convenait bien sans avoir besoin de changer de proxy d'apparence.
Réglage tintColor
pour UITextField
et UITextView
fonctionne différemment. Alors que pour UITextField
vous, vous n'avez pas besoin d'appeler un code supplémentaire après la mise tintColor
à jour pour changer la couleur du curseur, mais pour UITextView
vous, vous en avez besoin.
Donc, après avoir défini tintColor
pour UITextView
(cela n'a pas d'importance dans IB ou dans le code), vous devez appeler textView.tintColorDidChange()
pour l'appliquer (en fait, il transmettra la configuration de la vue texte à sa hiérarchie de sous-vues).
Cela a fonctionné pour moi rapidement:
UITextField.tintColor = UIColor.blackColor()
Vous pouvez également définir cela dans le storyboard: https://stackoverflow.com/a/18759577/3075340
Instance member 'tintcolor' cannot be used on type 'UITextField'
Une approche plus générale serait de définir la teinte de l'apparence de l'UIView.
UIColor *myColor = [UIColor purpleColor];
[[UIView appearance] setTintColor:myColor];
Est logique si vous utilisez de nombreux éléments d'interface utilisateur par défaut.
[UIView appearance]
Cela n'est possible qu'en accédant à une propriété privée et peut donc entraîner un rejet de l'application Apple AppStore.
L'approche de Durgesh fonctionne.
J'ai également utilisé de telles solutions KVC à plusieurs reprises. Malgré qu'il semble être sans papiers, mais cela fonctionne. Franchement, vous n'utilisez aucune méthode privée ici - uniquement le codage valeur-clé qui est légal.
PS 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 (comme navigatonBar) ou ivars privés.
Pour la version d'Interface Builder avec Swift
@IBOutlet weak var tvValue: UITextView! {
didSet {
tvValue.tintColor = .black
}
}
Si le UITextField
est de UISearchBar
puis obtenez d'abord la propriété textField
from searchBar
puis appliquez tintColor
:
let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.tintColor = UIColor.lightGray
Je pense que si vous voulez des couleurs personnalisées, vous pouvez aller dans le Assets.xcassets
dossier, faites un clic droit et sélectionnezNew Color Set
, une fois que vous avez créé la couleur que vous avez définie, donnez-lui un nom pour la réutiliser.
Et vous pouvez l'utiliser comme ceci:
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
UITextField
, y compris comment procéder dans Interface Builder, à stackoverflow.com/a/18759577/1709587