web-dev-qa-db-fra.com

Comment changer la couleur du bouton 'Annuler' de la barre UISearchBar dans Swift

J'ai ajouté une UISearchBar en haut de ma PFQueryTableViewController. J'ai modifié la couleur de la barre de recherche pour qu'elle corresponde à celle de mon application, mais cela semble également avoir modifié la couleur du bouton "Annuler" situé à sa droite. Idéalement, je veux que la couleur soit blanche. 

Cette image montre à quoi il ressemble actuellement:

 

Il semble qu'il n'y ait pas de bouton 'Annuler', mais il y en a une de même couleur que le searchBar (vous pouvez toujours appuyer dessus, etc.)

Est-il possible pour moi de changer la couleur de ce bouton 'Annuler en blanc? Tout ce que j'ai essayé ne semble faire aucune différence. 

Le code que j'ai utilisé pour rendre la UISearchBar cette couleur est:

UISearchBar.appearance().barTintColor = UIColor(hue: 359/360, saturation: 67/100, brightness: 71/100, alpha: 1)
UISearchBar.appearance().tintColor = UIColor(hue: 359/360, saturation: 67/100, brightness: 71/100, alpha: 1)

Et dans le storyboard, j'ai défini ceux-ci:

 enter image description here

Et enfin, pour rendre l'espace réservé et le texte en blanc à l'intérieur du SearchBar, j'ai utilisé:

for subView in self.filmSearchBar.subviews {

    for subsubView in subView.subviews {

        if let searchBarTextField = subsubView as? UITextField {

            searchBarTextField.attributedPlaceholder = NSAttributedString(string: NSLocalizedString("Search Cinevu film reviews", comment: ""), attributes: [NSForegroundColorAttributeName: UIColor.whiteColor()])

            searchBarTextField.textColor = UIColor.whiteColor()

        }

    }

}

Merci pour toute aide! :)

18
Nick89

En regardant autour de moi, cela semblait être le meilleur moyen de réaliser ce dont j'avais besoin:

 let cancelButtonAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
 UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes , for: .normal)
23
Nick89

Utilisez cette seule ligne dans le code pour changer la couleur du bouton d'annulation:

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue): UIColor.white], for: .normal)

Vérifié dans Xcode 9.2 avec Swift 4.0

11
Incredible_Dev

Basé sur le code de Nick89, j'ai changé comme ça pour Swift 3.1

let cancelButtonAttributes: [String: AnyObject] = [NSForegroundColorAttributeName: UIColor.white]

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(cancelButtonAttributes, for: .normal)

Je veux changer sur UISearchBar seulement au lieu de tout UIBarButton, donc j'utilise comme UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self])

10
saturngod

as-tu essayé UISearchBar.appearance (). TintColor = UIColor.whiteColor ()

7
David Yang Liu

Swift 4.2

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.black], for: .normal)
4
Abhishek Jain

Avec la chaîne d'outils Swift 4.0 RELEASE 2017-09-19, cela a fonctionné: 

    let cancelButtonAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
    UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(cancelButtonAttributes, for: .normal)
3
Tino

La version 4.2 de Swift, basée sur d'autres réponses: 

let cancelButtonAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key(rawValue: NSAttributedString.Key.foregroundColor.rawValue): UIColor.orange]
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(cancelButtonAttributes, for: .normal)
3
Matt

Je sais que cette question a suffisamment de réponses, mais voici un moyen simple d’obtenir la couleur d’arrière-plan SearchBar et la couleur d’arrière-plan du bouton Annuler que nous pouvons modifier directement dans l’inspecteur des attributs du storyboard.

pour la couleur d'arrière-plan SearchBar

 enter image description here

pour la couleur du bouton d'annulation de SearchBar

 enter image description here

1
Ram

Toutes les réponses ci-dessus n'ont pas fonctionné pour moi. (Vous avez le 'type' NSAttributedString.Key '(aka' NSString ') n'a pas d'erreur de membre' foregroundColor '')

Peut-être parce que je suis à Swift 3 ...

Voici le code légèrement modifié qui a fonctionné pour moi: -

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSForegroundColorAttributeName : .black], for: .normal)

Remarque:-

Si vous utilisez UISearchController, insérez ce code dans 'willPresentSearchController:' ou 'didPresentSearchController:'

0
Lok SN