Busqué la documentación y no pude encontrar nada para cambiar el color de UISearchBar. ¿Alguien sabe cómo cambiarlo? No hay ninguna propiedad textColor:/UISearchBar texto color
Thx
Busqué la documentación y no pude encontrar nada para cambiar el color de UISearchBar. ¿Alguien sabe cómo cambiarlo? No hay ninguna propiedad textColor:/UISearchBar texto color
Thx
sospecho que podría utilizar las técnicas descritas en this post
modificar el código presentado allí un poco, que subclase UISearchBar:
@interface SearchBar : UISearchBar {
}
@end
Entonces en su implementación:
- (void)layoutSubviews {
UITextField *searchField;
NSUInteger numViews = [self.subviews count];
for(int i = 0; i < numViews; i++) {
if([[self.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]) {
searchField = [self.subviews objectAtIndex:i];
}
}
if(!(searchField == nil)) {
searchField.textColor = [UIColor redColor];
}
[super layoutSubviews];
}
No he probado ni el código de la publicación original ni este código, pero parece que debería funcionar. -wkw
Puede hacer lo siguiente: Simplemente obtenga la propiedad searchField de SearchBar, y luego cambie su propiedad textColor.
UITextField *searchField = [searchbar valueForKey:@"_searchField"];
searchField.textColor = [UIColor redColor]; //You can put any color here.
Eso es todo! Ahora manipula el campo de texto de cualquier manera posible.
Espero que haya ayudado. – GeoExperts
Sí, es la manera más fácil de hacerlo, muchas gracias – Burjua
¿No es este un método privado? – dacopenhagen
Aquí es una categoría que se añade esta funcionalidad:
@implementation UISearchBar (UISearchBar_TextColor)
- (UITextField *)field {
// HACK: This may not work in future iOS versions
for (UIView *subview in self.subviews) {
if ([subview isKindOfClass:[UITextField class]]) {
return (UITextField *)subview;
}
}
return nil;
}
- (UIColor *)textColor {
return self.field.textColor;
}
- (void)setTextColor:(UIColor *)color {
self.field.textColor = color;
}
@end
No funcionó en iOS7, porque UITextField se mueve más profundamente en la jerarquía. Esto funciona: // Hack: Esto puede no funcionar en las futuras versiones de iOS para (UIView * subvista en bar.subviews) {if ( [isKindOfClass subvista: [clase] UITextField]) { retorno (UITextField *) subvista ; } else { para (subvista2 de UIView * en subvista.subviews) { if ([subvista2 esKindOfClass: [clase UITExtField]]) { return (UITextField *) subvista2; } } } } –
Nuevos desarrolladores ios, esta no es la respuesta para elegir cuando apple proporciona una API para establecer propiedades de aspecto. Looping a través de subvistas casi nunca es la solución correcta. – hhanesand
Aquí es un enfoque más limpio:
UITextField *searchField = nil;
for (UIView *v in self.searchBar.subviews)
{
if ([v isKindOfClass:[UITextField class]])
{
searchField = (UITextField *)v;
break;
}
}
if (searchField)
{
searchField.textColor = [UIColor whiteColor];
}
iOS 8: Ver https://stackoverflow.com/a/28183058/308315
iOS 6/7:
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor redColor]];
Fácilmente la mejor respuesta – Fraser
Funciona en iOS 7 y posterior:
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:@{
NSForegroundColorAttributeName : [UIColor whiteColor],
NSFontAttributeName : [UIFont systemFontOfSize:15]
}];
También puede quitar el atributo no utilizado.
ACTUALIZACIÓN. Debido a appearanceWhenContainedIn
está en desuso en IOS 9, véase la respuesta de la Dishant a continuación: https://stackoverflow.com/a/38893352/2799722
Funciona perfectamente en iOS 8. – ashForIos
Modificado categoría sugerida por David Foster (@ David Foster) para trabajar en iOS 8.
static UITextField *PBFindTextFieldInView(UIView *view) {
for(UIView *subview in view.subviews) {
if([subview isKindOfClass:UITextField.class]) {
return (UITextField *)subview;
} else {
UITextField* textField = PBFindTextFieldInView(subview);
if(textField) {
return textField;
}
}
}
return nil;
}
@implementation UISearchBar (Appearance)
- (UITextField *)field {
return PBFindTextFieldInView(self);
}
- (UIColor *)textColor {
return self.field.textColor;
}
- (void)setTextColor:(UIColor *)color {
self.field.textColor = color;
}
@end
appearanceWhenContainedIn es obsoleto en iOS 9, entonces tenemos que usar el método de abajo para iOS 9 y superior.
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
setTintColor:[UIColor whiteColor]];
con IOS 11 Se espera que la barra de búsqueda para convertirse en parte de la barra de navegación que, como era de esperar, añade todo tipo de nuevas "características".
Creo que es un error, pero me di cuenta que tenía que hacer lo siguiente para cambiar el texto (y botón de cancelación) Color:
self.searchController.searchBar.barStyle = UISearchBarStyleMinimal;
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
setTintColor:[UIColor whiteColor]];
me encontré con que el estilo de la barra, cuando se deja en "default , "haría que el texto fuera negro sin importar el color del tinte, etc.Cuando se establece en Mínimo o Prominente, el texto era visible.
Para iOS11, encontré esto funcionó:
Después de ajustar el searchController
en el navigationItem
, el texto de búsqueda era negro sobre negro. Para que sea blanco, tuve que hacer:
searchController.searchBar.barStyle = .blackTranslucent
Era lo único que funcionó para mí. Mi aplicación tiene una barra de navegación transparente para dejar que el gradiente de fondo mostrar a través de, y supongo que seguirán la barra de búsqueda toma en ese aspecto ya que mis parámetros de aspecto para UISearchBar
fueron ignoradas en gran medida con una excepción:
UISearchBar.appearance().tintColor = UIColor.red
Esto hizo que el botón Cancelar y el cursor de inserción de texto rojo. El texto del marcador de posición era gris claro.
Tenga en cuenta que: UISearchBar.appearance().barStyle = .blackTranslucent
no funcionó - se tuvo que configurar en la instancia. Esto tampoco tuvo un efecto visible en la barra de búsqueda (todavía era transparente como la barra de navegación); simplemente hizo que el texto de búsqueda sea blanco.
Después de ajustar el searchController
en el navigationItem
para iOS 11, encontré que el intento de establecer la textColor
través UIAppearance
para cualquier UITextField
dentro de un UISearchBar
no tuvo ningún efecto, sino una propiedad aspecto personalizado que simplemente se llama regular textColor
funcionaba bien.
// Implement a custom appearance property via a UITextField category
@interface UITextField (SearchBarTextColor)
@property (nonatomic, strong) UIColor * textColorWorkaround UI_APPEARANCE_SELECTOR;
@end
@implementation UITextField (SearchBarTextColor)
- (UIColor *)textColorWorkaround {
return self.textColor;
}
- (void)setTextColorWorkaround:(UIColor *)textColor {
self.textColor = textColor;
}
@end
Y a continuación, utilizar la siguiente manera:
UITextField *textFieldProxy = [UITextField appearanceWhenContainedInInstancesOfClasses:@[UISearchBar.class]];
textFieldProxy.textColorWorkaround = UIColor.lightGrayColor;
P. S. El mismo truco me ayudó a colorear las etiquetas aparentemente inaccesibles de UIDatePicker
y UIPickerView
Frickin insana, se necesita mucho pirateo para cambiar el color del texto de una barra de búsqueda, ¡Vamos! –