2010-08-05 11 views

Respuesta

9

En su delegado, la función

- (BOOL)textFieldShouldClear:(UITextField *)textField 

se llama cuando el usuario quiere borrar el campo de texto. Si devuelve SÍ y llama al

[textField resignFirstResponder]; 

, el teclado debería desaparecer. No sé sobre clearButtonMode, aparte de eso, es posible que desee configurarlo temprano, preferiblemente antes de agregar la vista a su supervista.

edición Para asegurarse de que realmente renunciar a la respuesta, intenta hacerlo un poco más adelante:

[textField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.1]; 
+0

Gracias, ¿alguna idea de por qué el teclado no desaparece al llamar a textFieldShouldClear como se indica anteriormente? Funciona con textFieldShouldReturn por ejemplo. – Dan

+1

Sí, podría ser que después de la limpieza, la UI fuerce el foco al campo de todos modos. Intenta renunciar un poco más tarde, usando la línea que agregué a mi respuesta. – mvds

+1

¡Salud, parece que el retraso resolvió el problema! – Dan

5

El retraso didn' me funciona bien En lugar de ello he añadido una variable de instancia al delegado:

BOOL cancelEdit; 

Luego, en la puesta en práctica delegado:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    if (cancelEdit) { 
     cancelEdit = NO; 

     return NO; 
    } else { 
     return YES; 
    } 
} 

- (BOOL)textFieldShouldClear:(UITextField *)textField 
{ 
    cancelEdit = YES; 

    return YES; 
} 
+0

Esta es la mejor solución. – Shmidt

+0

gran solución, gracias –

35

Como se mencionó antes, parece manzana se está poniendo el foco campo de texto después de que se borre el campo.

La solución es bastante simple. Sólo limpiar el campo mismo, y volver resignFirstResponder NO

-(BOOL)textFieldShouldClear:(UITextField *)textField 
    { 
     textField.text = @""; 
     [textField resignFirstResponder]; 

     return NO; 
    } 
+0

¡La mejor solución para mí! ¡Muchas gracias! –

+0

No quiero mostrar el teclado si el usuario toca el botón borrar, pero si se muestra el teclado, no quiero ocultarlo. Solo eliminé '[textField resignFirstResponder];' del código anterior. –

0

descubrí este extraño comportamiento fue causado por un reconocedor gesto de la competencia que renunció el primer nivel de respuesta antes de que el teclado antes de textFieldShouldClear: se llamaba. Parecía estar corrompiendo al primer respondedor.

Si lo ha configurado de esta manera, asegúrese de que cancelaTouchSInView en su reconocedor de gestos está establecido en SÍ. De esta forma, no debería necesitar hacer nada especial en el texto FieldShouldClear: o textFieldShouldBeginEditing: delegar métodos.

Cuestiones relacionadas