ios objective-c uisearchbar

ios - ¿Cómo cambiar el color del icono de UISearchBar?



objective-c (10)

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

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

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


Esta versión me funcionó 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)


La mejor solución que encontré estaba aquí Cambiando el color de los iconos en un UItextField dentro de una barra UISearchBar

(Esta solución utiliza el icono original de UISearchBar, sin necesidad de proporcionar su propio activo 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 }


Para swift 3

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


Puede usar una imagen personalizada de un icono de búsqueda en blanco, ya que la barra de búsqueda no modificará la imagen suministrada. Para establecer una imagen personalizada, utilice este método. ( Enlace a la documentación ) .

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

Código de ejemplo:

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

En Swift:

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


Según la respuesta de Federica ... Para hacer esto de manera rápida

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


Siguiendo algunas de las respuestas aquí

Si desea ver y realizar los cambios en la barra de UISearch de la primera subclase del guión gráfico y hacer lo anterior.

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

He agregado la subclase de trabajo completa y el código a continuación para swift 3.0 Aquí podrá cambiar el texto del marcador de posición, el texto 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 } } }

}


Solo para cambiar 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.red }

Crea un resultado así:


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

Llama a estos métodos de extensión de esta manera:

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


if(IOS_7) { self.searchBar.searchBarStyle = UISearchBarStyleMinimal; self.searchBar.backgroundImage = [UIImage imageWithColor:[UIColor redColor] cornerRadius:5.0f]; }