UISearchBar : modification de l'apparence du composant
Bonsoir à tous,
Je rencontre une petite difficulté (toute relative). Disons que c'est un cas un peu pénible à gérer, sauf si il existe une solution qui m'est inconnu. Je m'explique, j'ai personnalisé ne UISearchBar. Je souhaiterais personnalisé la taille et la couleur du bouton qui permet de réinitialiser le textfield de recherche (voir screen en pièce jointe). J'ai fait quelque chose comme ça mais qui ne fonctionne pas :
internal class MySearchBar: UISearchBar {
internal required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setup()
}
internal override init(frame: CGRect) {
super.init(frame: frame)
self.setup()
}
private func setup() {
self.isHidden = false
self.isTranslucent = false
self.keyboardAppearance = .dark
self.setPositionAdjustment(UIOffsetMake(0.0, 0.0), for: .search)
self.setPositionAdjustment(UIOffsetMake(0.0, 0.0), for: .clear)
self.searchTextPositionAdjustment = UIOffsetMake(4.0, 0.0)
}
override func layoutSubviews() {
super.layoutSubviews()
if let textFieldInsideSearchBar = self.value(forKey: "_searchField") as? UITextField {
if let clearButton = textFieldInsideSearchBar.valueForKey("_clearButton") as? UIButton {
let templateImage = clearButton.imageView?.image?.imageWithRenderingMode(.alwaysTemplate)
clearButton.setImage(templateImage, forState: .normal)
clearButton.tintColor = .red
}
}
}
}
La ligne suivante le fonctionne pas car l'image n'est pas affichée et ne peut donc pas être récupérée :
let templateImage = clearButton.imageView?.image?.imageWithRenderingMode(.alwaysTemplate)
J'ai pensé catcher l'évènement "begin editing" dans lequel le bouton apparait. Mais je trouve ça super lourdingue comme approche. Il n'existe pas quelque chose de plus simple ?
Je vous remercie par avance pour vos idées éventuelles.
Réponses
Bonsoir Jérémy !
Je n'ai pas encore utilisé la SearchBar d'Apple, et je ne suis pas sûr de pouvoir t'aider...
Avec le code suivant, as-tu le résultat que tu désires ?
Ou
http://www.tanryan.com/2015/05/changing-icon-colors-on-uisearchbar-and-uitextfield/
Merci à vous deux pour vos réponses.
Ce que tu proposes fait le job. Seulement ta proposition consiste à insérer ta propre image. Or moi, celle proposé par Apple me convient très bien, je souhaite juste ajuster la couleur.
Les liens que tu me recommandes Joanna consiste à faire ce que j'ai proposé dans le post initial de ce fil de discussion. Je trouve dommage qu'il n'y ait pas une mécanique plus simple autre que de setter sa propre image... -_-
Joanna je viens de tester et ça ne fonctionne pas. La couleur ne peut être changé tant que l'image n'est pas à l'écran. Peut être que j'ai placé mon code dans un mauvais événement. Il faudrait surement pouvoir catcher l'apparition du bouton... Si tu as une idée je suis preneur...
Jérémy, j'ai cherché d'autres pistes pour toi, mais c'est toujours la même chose : créer une image et l'afficher.
Cependant, j'ai trouvé ce code qui pourrait t'intéresser :
https://stackoverflow.com/questions/29953989/swift-how-to-change-uisearchbar-clear-button-color-without-uploading-a-new-image
Au pire, il te reste une seule solution : c'est tout simplement de recréer l'image proposé par Apple, et de la coloriser comme tu veux.
Je suis désolé, mais je ne vois pas comment faire autrement...