El UISearchBar
no tiene un método delegado para este evento. Casi puede obtener lo que desea implementando el método textDidChange:
del delegado de devolución de llamada y buscando una cadena vacía.
No lo recomiendo, pero hay otra manera posible. El UISearchBar
está compuesto por un UITextField, que tiene un método delegado que se llama cuando el usuario toca el botón borrar (textFieldShouldClear:
). Usted puede obtener el UITextField
por la que atraviesa el UISearchBar
's vistas secundarias:
(esto es, en el contexto de una clase derivada UISearchBar
)
- (UIView*) textField
{
for (UIView* v in self.subviews)
{
if ([v isKindOfClass: [UITextField class]])
return v;
}
return nil;
}
desde aquí, podría reasignar el delegado UITextField
a su propia implementación, teniendo cuidado de reenviar las llamadas de delegado al antiguo delegado. De esta manera podría interceptar textFieldShouldClear:
. O si resulta que el UISearchBar
es el delegado para el UITextField
que contiene, podría swizzlear la llamada a textFieldShouldClear: ... No es ideal, claro, pero técnicamente factible.
¿Por qué no recomiendan la aplicación de la textDidChange y la comprobación de una cadena vacía? –
Creo que esta sería una buena forma de hacerlo.Pero no es exactamente lo que está pidiendo, ya que el texto puede convertirse en una cadena vacía en otras formas que haciendo clic en la 'x'. Al igual que el retroceso ... Entonces, si quiere que le avisemos siempre que haga clic en la 'x', esto dará como resultado un falso positivo. – TomSwift
Esto no va a funcionar con ios 8 más –