Je veux que la couleur de teinte de ma barre de recherche soit blanche (ce qui signifie que le bouton d'annulation soit blanc). Le curseur n'est pas visible lorsque la couleur de la teinte est blanche. Existe-t-il un moyen de définir la couleur du curseur séparément?
Définissez votre couleur de teinte à la couleur que vous souhaitez que le bouton d'annulation soit, puis utilisez le IAppearance Protocol pour changer la couleur de teinte dans le champ de texte pour qu'elle soit la couleur que vous souhaitez que le curseur soit. Ex:
[self.searchBar setTintColor:[UIColor whiteColor]];
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:[UIColor darkGrayColor]];
Si vous aimez les doublures fonctionnelles, mais ennuyeuses dans Swift, j'ai obtenu la boucle de Benjamin pour ceci:
searchController.searchBar.tintColor = UIColor.whiteColor()
searchController.searchBar.subviews[0].subviews.flatMap(){ $0 as? UITextField }.first?.tintColor = UIColor.blueColor()
searchController.searchBar.tintColor = .white
UITextField.appearance(whenContainedInInstancesOf: [type(of: searchController.searchBar)]).tintColor = .black
Notez que searchBar ne peut pas être facultatif.
Compact Swift 2.0 utilisant la syntaxe for-where (pas besoin de rompre la boucle):
// Make SearchBar's tint color white to get white cancel button.
searchBar.tintColor = UIColor.white()
// Loop into it's subviews and find TextField, change tint color to something else.
for subView in searchBar.subviews[0].subviews where subView.isKindOfClass(UITextField) {
subView.tintColor = UIColor.darkTextColor()
}
Cela a semblé fonctionner pour moi dans Swift également.
searchController.searchBar.tintColor = UIColor.whiteColor()
UITextField.appearanceWhenContainedInInstancesOfClasses([searchController.searchBar.dynamicType]).tintColor = UIColor.blackColor()
Pour ceux qui cherchent à faire de même dans Swift, voici une solution que je suis arrivée après beaucoup de problèmes:
override func viewWillAppear(animated: Bool) {
self.searchBar.tintColor = UIColor.whiteColor()
let view: UIView = self.searchBar.subviews[0] as! UIView
let subViewsArray = view.subviews
for (subView: UIView) in subViewsArray as! [UIView] {
println(subView)
if subView.isKindOfClass(UITextField){
subView.tintColor = UIColor.blueColor()
}
}
}
La façon la plus simple de définir une teinte différente pour le bouton Annuler et le champ de texte, utilisez ceci:
[self.searchBar setTintColor:[UIColor whiteColor]];
[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTintColor:UIColor.blueColor];
Je voudrais simplement ajouter une extension à UISearchBar avec le code suivant.
extension UISearchBar {
var cursorColor: UIColor! {
set {
for subView in self.subviews[0].subviews where ((subView as? UITextField) != nil) {
subView.tintColor = newValue
}
}
get {
for subView in self.subviews[0].subviews where ((subView as? UITextField) != nil) {
return subView.tintColor
}
// Return default tintColor
return UIColor.eightBit(red: 1, green: 122, blue: 255, alpha: 100)
}
}
}
C'est la solution la plus simple.
let textField = self.searchBar.value(forKey: "searchField") as! UITextField
textField.tintColor = UIColor.white
Le plus simple en Swift 5:
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).tintColor = .black
Voici une version "fonctionnelle" de la réponse de Felipe (Swift 4.2)
// Make SearchBar's tint color white to get white cancel button.
searchBar.tintColor = .white
// Get the TextField subviews, change tint color to something else.
if let textFields = searchBar.subviews.first?.subviews.compactMap({ $0 as? UITextField }) {
textFields.forEach { $0.tintColor = UIColor.darkGray }
}