personalizar UISearchBarIconClear para UIControlStateHighlighted no funciona

Tengo un UISearchBar para el que he configurado un UISearchBarIconClear personalizado para UiControlStateNormal.

[mySearchBar setImage:myImage forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal]; 

Esta parte funciona como debería, pero desafortunadamente al tocar el button borrar, cambia de la image que configuré a la gris original.

He intentado configurar la image para UIControlStateHighlighted, pero al parecer eso no funciona.

La documentation realmente declara

Los estados válidos son UIControlStateNormal y UIControlStateDisabled.

¿Cuál es el objective de configurar un button personalizado para el estado pnetworkingeterminado si no puede configurarlo para el estado resaltado? ¿Me estoy perdiendo de algo? Cualquier pensamiento o solución se agradece, ¡gracias!

Me topé con el mismo problema un poco antes hoy, esta es mi solución realmente fea que probablemente no usaría yo mismo.

 for(UIView *subView in searchBar.subviews) { if([subView isKindOfClass: [UITextField class]]){ UITextField *searchField = (UITextField *)subView; CGFloat myWidth = 26.0f; CGFloat myHeight = 30.0f; UIButton *myButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, myWidth, myHeight)]; [myButton setImage:[UIImage imageNamed:@"searchbariconclear"] forState:UIControlStateNormal]; [myButton setImage:[UIImage imageNamed:@"searchbariconclear"] forState:UIControlStateHighlighted]; [myButton addTarget:self action:@selector(clearsearchbar) forControlEvents:UIControlEventTouchUpInside]; searchField.rightView = myButton; searchField.rightViewMode = UITextFieldViewModeAlways; searchField.clearButtonMode = UITextFieldViewModeNever; } } 

Y entonces..

 - (void)clearsearchbar { for(UIView *subView in searchBar.subviews) { if([subView isKindOfClass: [UITextField class]]){ UITextField *searchField = (UITextField *)subView; searchField.text = nil; } } } 

Tres problemas con este enfoque …

  1. Como estamos cavando dentro de las subvistas de la barra de búsqueda, podría romper algún día con una actualización del sistema operativo.

  2. Esto no se comporta exactamente como UISearchBarIconClear, ya que el ícono de borrado siempre estará visible .. Probablemente podría probar con otros UITextFieldViewModes usando este enfoque, no principalmente porque, por lo que sé ninguno de los otros sería ideal aquí, por alguna razón u otra.

  3. Tal vez sea solo yo, pero realmente no creo que algo que presenta dos problemas al tratar de resolver uno sea una solución. Todos los derechos reservados

Si alguien tiene una mejor manera de abordar este problema, me encantaría escucharlo también.

Tuve el mismo problema, y ​​al ajustar el order de las declaraciones lo resolví:

Entonces, en lugar de hacer primero UIControlStateHighlighted , UIControlStateHighlighted , establece primero la image para el estado resaltado

 [searchBar setImage:clearIcon forSearchBarIcon:UISearchBarIconClear state:UIControlStateHighlighted]; [searchBar setImage:clearIcon forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal]; 

¿Qué hay de usar proxy de apariencia?

 [[UIButton appearanceWhenContainedIn:[UITextField class], [UISearchBar class], nil] setImage:myImage forState:UIControlStateHighlighted]; 

Acabo de tener el mismo problema que describiste con el ícono de borrado reiniciando el ícono pnetworkingeterminado al ser presionado.

Esto parece deberse a que intenté usar el mismo UIImage tanto para el estado normal como para el resaltado, cambiar a una image diferente para el estado resaltado solucionó el problema.