¿Cómo cambiar el color del ícono UISearchBar?

No sé cómo modificar el searchIcon original de searchIcon .

introduzca la descripción de la imagen aquí

Puede usar una image personalizada de un ícono de búsqueda blanco, ya que la barra de búsqueda no modificará la image suministrada. Para configurar una image personalizada, use este método. ( Enlace a la documentation. )

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

Ejemplo de código:

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

En Swift:

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

La mejor solución que encontré fue aquí Cambiar el color de los icons en un UItextField dentro de un UISearchBar

(Esta solución utiliza el ícono de UISearchBar original, no es necesario que proporcione su propio recurso gráfico)

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

Según la respuesta de Federica … Para hacer esto en swift

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

Esta soulción funcionó para mí en Xcode 8.2.1 en 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 } } 

Ejemplo de uso:

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

A partir de algunas de las respuestas aquí

Si desea ver y hacer los cambios en la primera barra de UISearch de la subclass de storyboard y hacer lo mismo.

Sin embargo, agregue los cambios en una variable @IBInspectable y no olvide el @IBDesignable en la parte superior de la class y configure la subclass de la barra de búsqueda en el "Inspector de identidad"

He agregado la subclass de trabajo completa y el código a continuación para swift 3.0. Aquí podrá cambiar el text del marcador de position, el text de búsqueda y la lupa.

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

}

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

Llame a este método de extensión de la siguiente manera:

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

Asegúrese de que cuando use la API de setImage , pase una image con el modo de representación de UIImageRenderingModeAlwaysTemplate . Por ejemplo:

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

Simplemente cambiando el color del ícono de búsqueda, sin alterar el ícono real en 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.networking } 

Crea un resultado como tal:

icono de barra de búsqueda alterada

Para swift 3

  searchBar.setImage(UIImage(named: "location-icon-black"), for: .search, state: .normal) 
 if(IOS_7) { self.searchBar.searchBarStyle = UISearchBarStyleMinimal; self.searchBar.backgroundImage = [UIImage imageWithColor:[UIColor networkingColor] cornerRadius:5.0f]; }