bar ios uisearchbar placeholder

ios - UISearchBar cambia el color del marcador de posición



ios search bar (14)

Aquí hay una solución para Swift:

Swift 2

var textFieldInsideSearchBar = searchBar.valueForKey("searchField") as? UITextField textFieldInsideSearchBar?.textColor = UIColor.whiteColor() var textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.valueForKey("placeholderLabel") as? UILabel textFieldInsideSearchBarLabel?.textColor = UIColor.whiteColor()

Swift 3

let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField textFieldInsideSearchBar?.textColor = UIColor.white let textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.value(forKey: "placeholderLabel") as? UILabel textFieldInsideSearchBarLabel?.textColor = UIColor.white

¿Alguien tiene idea o muestra de código sobre cómo puedo cambiar el color del texto del marcador de posición de un UISearchBar?


Después de estudiar un par de respuestas, salgo de esto, espero que sea de ayuda

for (UIView *subview in searchBar.subviews) { for (UIView *sv in subview.subviews) { if ([NSStringFromClass([sv class]) isEqualToString:@"UISearchBarTextField"]) { if ([sv respondsToSelector:@selector(setAttributedPlaceholder:)]) { ((UITextField *)sv).attributedPlaceholder = [[NSAttributedString alloc] initWithString:searchBar.placeholder attributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]}]; } break; } } }


Encontré la respuesta del texto del marcador de posición de Change UITextField programáticamente

// Get the instance of the UITextField of the search bar UITextField *searchField = [searchBar valueForKey:@"_searchField"]; // Change search bar text color searchField.textColor = [UIColor redColor]; // Change the search bar placeholder text color [searchField setValue:[UIColor blueColor] forKeyPath:@"_placeholderLabel.textColor"];



Esta es una vieja pregunta, pero para cualquiera que la encuentre hoy en día, puede cambiar el ícono de búsqueda en iOS 8.x - 10.3 usando lo siguiente:

@IBOutlet weak var sbSearchBar: UISearchBar! if let textfield = sbSearchBar.value(forKey: "searchField") as? UITextField { textfield.backgroundColor = UIColor.yellow textfield.attributedPlaceholder = NSAttributedString(string: textfield.placeholder ?? "", attributes: [NSAttributedStringKey.foregroundColor : UIColor.red]) textfield.textColor = UIColor.green if let leftView = textfield.leftView as? UIImageView { leftView.image = leftView.image?.withRenderingMode(.alwaysTemplate) leftView.tintColor = UIColor.red } }

Con respecto al color del texto del marcador de posición, puede consultar mi otra respuesta, que usa una Categoría, aquí: UISearchBar cambia el color del marcador de posición


Esta solución funciona en Xcode 8.2.1. con Swift 3.0. :

searchController.searchBar.setPlaceholderTextColorTo(color: mainColor)

Ejemplo de uso:

[_searchBar setImage:[UIImage imageNamed:@"your-image-name"] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal];


La primera solución está bien, pero si usa múltiples UISearchBar, o crea muchas instancias, puede fallar. La única solución que siempre me funciona es utilizar también proxy de apariencia pero directamente en UITextField

NSDictionary *placeholderAttributes = @{ NSForegroundColorAttributeName: [UIColor darkButtonColor], NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:15], }; NSAttributedString *attributedPlaceholder = [[NSAttributedString alloc] initWithString:self.searchBar.placeholder attributes:placeholderAttributes]; [[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setAttributedPlaceholder:attributedPlaceholder];


Pon esto en viewDidLoad de tu viewController (trabajando en iOS 9):

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


Prueba esto:

UITextField *searchField = [searchbar valueForKey:@"_searchField"]; field.textColor = [UIColor redColor]; //You can put any color here.


Prueba esto:

[self.searchBar setValue:[UIColor whatever] forKeyPath:@"_searchField._placeholderLabel.textColor"];

También puede establecer esto en el guión gráfico, seleccionar la barra de búsqueda, agregar entrada en Atributos de tiempo de ejecución definidos por el usuario:

_searchField._placeholderLabel.textColor

de tipo Color y seleccione el color que necesita.


Pruebe esto y vea: ( Probé el código a continuación con Swift 4.1 - Xcode 9.3-beta4 )

UITextField *searchField = [self.searchBar valueForKey:@"_searchField"]; //self.searchBar is mine targeted searchBar, replace with your searchBar reference // Change search bar text color searchField.textColor = [UIColor whiteColor]; // Change the search bar placeholder text color [searchField setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"]; //Change search bar icon if needed [self.searchBar setImage:[UIImage imageNamed:@"searchIcon"] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal];

Aquí está el resultado:


Swift 3

UILabel.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = UIColor.white


para iOS5+ use el proxy de apariencia

[[UILabel appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor redColor]];


if let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as ? UITextField { textFieldInsideSearchBar ? .textColor = UIColor.white if let textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.value(forKey: "placeholderLabel") as ? UILabel { textFieldInsideSearchBarLabel ? .textColor = UIColor.white if let clearButton = textFieldInsideSearchBar ? .value(forKey: "clearButton") as!UIButton { clearButton.setImage(clearButton.imageView ? .image ? .withRenderingMode(.alwaysTemplate), for : .normal) clearButton.tintColor = UIColor.white } } let glassIconView = textFieldInsideSearchBar ? .leftView as ? UIImageView glassIconView ? .image = glassIconView ? .image ? .withRenderingMode(.alwaysTemplate) glassIconView ? .tintColor = UIColor.white }