it-swarm.com.de

Wie kann ich die Farbe des UISearchBar-Symbols ändern?

Ich kann nicht die Farbe des Originals searchIcon ändern.

enter image description here

21
Damien Romito

Sie können ein benutzerdefiniertes Bild eines weißen Suchsymbols verwenden, da die Suchleiste Ihr angegebenes Bild nicht ändert. Verwenden Sie diese Methode, um ein benutzerdefiniertes Bild festzulegen. ( Link zur Dokumentation. )

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

Beispielcode: 

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

In Swift: 

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

Die beste Lösung, die ich gefunden habe, war hier Ändern der Farbe der Symbole in einem UItextField innerhalb einer UISearchBar

(Diese Lösung verwendet das ursprüngliche UISearchBar-Symbol. Sie müssen kein eigenes grafisches Asset bereitstellen.)

Umgerechnet in 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

Diese Lösung hat für mich auf Xcode 8.2.1 in Swift 3.0 funktioniert. :

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
    }
}

Anwendungsbeispiel:

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

Wie in Anlehnung an Federicas. Um dies in Swift zu tun 

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
    }
}

Rufen Sie diese Erweiterungsmethode wie folgt auf:

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

Um nur die Farbe des Suchsymbols zu ändern, ohne das tatsächliche Symbol in Swift 3 zu ändern: 

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
}

Erzeugt ein Ergebnis wie folgt:

 altered search bar icon

3
Benjamin Lowry

Nachfolgend einige Antworten hier

Wenn Sie die Änderungen in Storyboard der UISearch-Leiste zuerst sehen und vornehmen möchten, gehen Sie wie oben beschrieben vor. 

Fügen Sie jedoch die Änderungen in einer @IBInspectable-Variablen hinzu und vergessen Sie nicht, @IBDesignable oben in der Klasse zu vergessen und die Searchbar-Unterklasse im Identitätsinspektor festzulegen

Ich habe die vollständige Arbeitskategorie und den Code unten für Swift 3.0 hinzugefügt. Hier können Sie den Platzhaltertext, den Suchtext und die Lupe ändern

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

Stellen Sie sicher, dass bei der Verwendung der setImage-API ein Bild mit dem Rendermodus UIImageRenderingModeAlwaysTemplate übergeben wird. Zum Beispiel:

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

Meine Lösung:

searchBar = UISearchBar()
searchBar.searchBarStyle = .minimal
searchBar.setTextColor(.white)
let textField = self.searchBar.getTextField()
let glassIconView = textField?.leftView as? UIImageView
glassIconView?.image = glassIconView?.image?.withRenderingMode(.alwaysTemplate)
glassIconView?.tintColor = .white
searchBar.showsCancelButton = true

extension UISearchBar {
    func getTextField() -> UITextField? {
        return self.value(forKey: "searchField") as? UITextField
    }

    func setTextColor(_ color: UIColor) {
        let textField = getTextField()
        textField?.textColor = color
    }
}
0
PhuocLuong

Für Swift 3

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