UISearchBar : modification de l'apparence du composant

JérémyJérémy Membre
novembre 2017 modifié dans Dev. iOS, watchOS, tvOS #1

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.  :D


Mots clés:

Réponses

Connectez-vous ou Inscrivez-vous pour répondre.