web-dev-qa-db-fra.com

Comment changer la couleur de l'icône UISearchBar?

Je ne sais pas comment modifier la couleur d'origine de searchIcon.

enter image description here

21
Damien Romito

Vous pouvez utiliser une image personnalisée d'une icône de recherche blanche, car la barre de recherche ne modifiera pas l'image fournie. Pour définir une image personnalisée, utilisez cette méthode. ( Lien vers la documentation. )

- (void)setImage:(UIImage *)iconImage
forSearchBarIcon:(UISearchBarIcon)icon
           state:(UIControlState)state;

Exemple de code: 

[searchBar setImage:[UIImage imageNamed:@"SearchIcon"]
   forSearchBarIcon:UISearchBarIconSearch
              state:UIControlStateNormal];

En rapide: 

searchBar.setImage(UIImage(named: "SearchIcon"), for: .search, state: .normal)
27
Federica Venuto

La meilleure solution que j'ai trouvée était ici Changer la couleur des icônes d'un UItextField dans un UISearchBar

(Cette solution utilise l'icône de UISearchBar d'origine, pas besoin de fournir votre propre actif graphique)

Converti en Swift (Swift 3):

    if let textFieldInsideSearchBar = self.searchBar.value(forKey: "searchField") as? UITextField,
        let glassIconView = textFieldInsideSearchBar.leftView as? UIImageView {

            //Magnifying glass
            glassIconView.image = glassIconView.image?.withRenderingMode(.alwaysTemplate)
            glassIconView.tintColor = .whiteColor
    }
24
raf

Cette soultion a fonctionné pour moi sur Xcode 8.2.1 dans Swift 3.0. :

extension UISearchBar
{
    func setPlaceholderTextColorTo(color: UIColor)
    {
        let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField
        textFieldInsideSearchBar?.textColor = color
        let textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.value(forKey: "placeholderLabel") as? UILabel
        textFieldInsideSearchBarLabel?.textColor = color
    }

    func setMagnifyingGlassColorTo(color: UIColor)
    {
        let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField
        let glassIconView = textFieldInsideSearchBar?.leftView as? UIImageView
        glassIconView?.image = glassIconView?.image?.withRenderingMode(.alwaysTemplate)
        glassIconView?.tintColor = color
    }
}

Exemple d'utilisation:

searchController.searchBar.setPlaceholderTextColorTo(color: mainColor)
searchController.searchBar.setMagnifyingGlassColorTo(color: mainColor)
7
Darkwonder

Selon la réponse de Federica .... Pour faire cela à Swift 

var image: UIImage = UIImage(named: "search")!
self.searchBar.setImage(image, forSearchBarIcon: UISearchBarIcon.Search, state: UIControlState.Normal)
5
Allreadyhome

Swift-3:

extension UISearchBar
{

    func setMagnifyingGlassColorTo(color: UIColor)
    {
        // Search Icon
        let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField
        let glassIconView = textFieldInsideSearchBar?.leftView as? UIImageView
        glassIconView?.image = glassIconView?.image?.withRenderingMode(.alwaysTemplate)
        glassIconView?.tintColor = color
    }

    func setClearButtonColorTo(color: UIColor)
    {
        // Clear Button
        let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField
        let crossIconView = textFieldInsideSearchBar?.value(forKey: "clearButton") as? UIButton
        crossIconView?.setImage(crossIconView?.currentImage?.withRenderingMode(.alwaysTemplate), for: .normal)
        crossIconView?.tintColor = color
    }

    func setPlaceholderTextColorTo(color: UIColor)
    {
        let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField
        textFieldInsideSearchBar?.textColor = color
        let textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.value(forKey: "placeholderLabel") as? UILabel
        textFieldInsideSearchBarLabel?.textColor = color
    }
}

Appelez cette méthode d'extension comme ceci:

searchBarTextField.setMagnifyingGlassColorTo(color: yourColor)
searchBarTextField.setClearButtonColorTo(color: yourColor)
searchBarTextField.setPlaceholderTextColorTo(color: yourColor)
3
FARAZ

Pour changer simplement la couleur de l’icône de recherche, sans modifier l’icône réelle dans Swift 3: 

if let textField = self.searchBar.value(forKey: "searchField") as? UITextField,
    let iconView = textField.leftView as? UIImageView {

    iconView.image = iconView.image?.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
    iconView.tintColor = UIColor.red
}

Crée un résultat comme celui-ci:

 altered search bar icon

3
Benjamin Lowry

Suite de certaines des réponses ici

Si vous souhaitez voir les modifications dans le storyboard, commencez par utiliser la barre UISearch dans la sous-classe et procédez comme ci-dessus. 

Cependant, ajoutez les modifications dans une variable @IBInspectable sans oublier le @IBDesignable en haut de la classe et définissez la sous-classe de la barre de recherche dans "l'inspecteur d'identité".

J'ai ajouté la sous-classe de travail complète et le code ci-dessous pour Swift 3.0Vous pourrez modifier le texte fictif, le texte de recherche et la loupe.

import UIKit

@IBDesignable

class CustomSearchBar: UISearchBar {
@IBInspectable var placeholderColor: UIColor? {
    didSet {

        let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField
        let textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.value(forKey: "placeholderLabel") as? UILabel
        textFieldInsideSearchBarLabel?.textColor = placeholderColor
    }
}

@IBInspectable var textColor: UIColor? {
    didSet {
        let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField
        textFieldInsideSearchBar?.textColor = textColor
    }
}

@IBInspectable var magnifyingGlassColor: UIColor? {

    didSet {

        if let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField,
            let glassIconView = textFieldInsideSearchBar.leftView as? UIImageView {

            //Magnifying glass
            glassIconView.image = glassIconView.image?.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
            glassIconView.tintColor = magnifyingGlassColor

        }        }
}

}

2
Tom

Assurez-vous que lorsque vous utilisez l'API setImage, transmettez une image avec le mode de rendu UIImageRenderingModeAlwaysTemplate. Par exemple:

[self.searchBar setImage:[[UIImage imageNamed: @"icon-search"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal];
1
Enrico Susatyo

Pour Swift 3

        searchBar.setImage(UIImage(named: "location-icon-black"), for: .search, state: .normal)
0
bikram sapkota