2011-07-25 27 views
18

¿Cómo puedo detectar el botón de retroceso presionado en UIKeyboard?Cómo detectar el botón UIKeyboard "backspace" touch en UITextField?

enter image description here

gracias


EDIT: ¿Hay alguna delegado teclado que devuelve el valor pulsar la tecla?

+0

pregunta similar aquí: http://stackoverflow.com/questions/4351358/detect-backspace-in-uitextfield-on-a-blank-textfield/4355245#4355245 –

+0

de vacío UITextField, la detección de retroceso mira esto : - https://stackoverflow.com/a/45327651/996796 –

Respuesta

55

si el UITextField está vacía, el método shouldChangeTextInRange delegado no se llama Usted puede subclase UITextField y reemplazar este método :

-(void)deleteBackward; 
{ 
    [super deleteBackward]; 
    NSLog(@"BackSpace Detected"); 
} 

desde UITextField es compatible con el protocolo UITextInput, se implementa este método, y se puede anularlo para detectar cuando se pulsa la tecla de retroceso. Luego, puede escribir su propio protocolo/método de delegado para alertar a su delegado de campo de texto personalizado si se detecta el espacio de retroceso.

+4

En mi opinión, ¡esta debería ser la respuesta aceptada! –

+1

+1 Esta respuesta es mucho más simple que las de http://stackoverflow.com/questions/1977934/detect-backspace-in-uitextfield. – ide

+2

Esto no funciona en iOS8 - hay un error de Apple. Esperemos que se solucione en iOS8.1 –

4

Temporal estoy insertando un char el espacio cero en textFieldDidBeginEditing

textField.text = @"\u200B"; 

en retroceso, es eliminar ese caracteres, pero de forma gráfica es la misma!

Es un truco, funciona, pero ocultar marcador de posición ... no es bueno ...

28

En primer lugar, su UIViewController que hace referencia al UITextField necesita ajustarse al UITextFieldDelegate . Luego configure su clase como delegate en el UITextField (por ejemplo, [myTextField setDelegate:self]). Luego, en su clase, agregue lo siguiente. Cuando se envía una cadena de "" como replacementString, sabe que está retrocediendo.

(BOOL)textField:(UITextField *)textField 
     shouldChangeCharactersInRange:(NSRange)range 
     replacementString:(NSString *)string 
{     
    if ([string isEqualToString:@""]) { 
     NSLog(@"Backspace");    
    } 
    return YES; 
} 
Cuestiones relacionadas