Question

Je veux que ma couleur de teinte de la barre de recherche soit blanche (ce qui signifie que le bouton Annuler soit blanc).Le curseur n'est pas visible lorsque la couleur de la teinte est blanche.Y a-t-il un moyen de définir la couleur du curseur séparément?

Était-ce utile?

La solution

Définissez votre couleur de teinte sur la couleur que vous souhaitez que le bouton Annuler soit puis utilisez le protocole UIAPPearance Pour changer la couleur de la teinte sur le champ de texte pour être la couleur que vous souhaitez que le curseur soit.Ex:

[self.searchBar setTintColor:[UIColor whiteColor]];                
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:[UIColor darkGrayColor]];

Autres conseils

Si vous aimez des doublures fonctionnelles, encore gênantes à Swift, j'ai eu une boucle de Benjamin à ce sujet:

searchController.searchBar.tintColor = UIColor.whiteColor()

searchController.searchBar.subviews[0].subviews.flatMap(){ $0 as? UITextField }.first?.tintColor = UIColor.blueColor()

Version SWIFT 3.0 et 4

searchController.searchBar.tintColor = .white        
UITextField.appearance(whenContainedInInstancesOf: [type(of: searchController.searchBar)]).tintColor = .black

Notez que la barre de recherche ne peut pas être facultative.

solution compacte Swift 2.0 en utilisant pour-où syntaxe (pas besoin de casser 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()
}

searchBar.tintColor = [UIColor whiteColor];
searchBar.backgroundColor = [UIColor clearColor];
for ( UIView *v in [searchBar.subviews.firstObject subviews] )
{
    if ( YES == [v isKindOfClass:[UITextField class]] )
    {
        [((UITextField*)v) setTintColor:[UIColor blueColor]];
        break;
    }
}

 Entrez la description de l'image ici

Cela semblait travailler pour moi à Swift aussi.

    searchController.searchBar.tintColor = UIColor.whiteColor()
    UITextField.appearanceWhenContainedInInstancesOfClasses([searchController.searchBar.dynamicType]).tintColor = UIColor.blackColor()

Pour ceux qui cherchent à faire la même chose à Swift, voici une solution que je suis venue chez ACCROS 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()
        }
    }

}

J'ajouterais simplement une extension à UiseearchBar 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)
        }
    }
}

iOS 9 et plus

Le moyen le plus simple de définir un TintColor différent pour l'annulation du bouton et de la Textfield, utilisez ceci:

[self.searchBar setTintColor:[UIColor whiteColor]];
[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTintColor:UIColor.blueColor];

C'est la solution la plus facile.

let textField = self.searchBar.value(forKey: "searchField") as! UITextField

    textField.tintColor = UIColor.white

plus facile à 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 }
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top