2011-11-07 16 views
6

En UITextView hay un evento Modificado para manejar la pulsación de tecla. Sin embargo, el UITextField no tiene tal evento.¿Cómo puedo detectar un evento KeyPress en UITextField?

¿Cómo puedo detectar un evento KeyPress en UITextField?

Hay un método descrito here usando notificaciones, sin embargo, el problema que tengo es que no puedo anular la suscripción a TextFieldTextDidChangeNotification.

Respuesta

3

No estoy seguro de cuál es su pregunta. La primera que parece haber respondido usted mismo, es decir, , la solución (de su enlace) es usar NSNotificationCenter.DefaultCenter.AddObserver.

El segundo se acerca darse de baja - si desea dejar de observar que usted debe llamar al método anterior contraparte, es decir NSNotificationCenter.DefaultCenter.RemoveObserver.

Simplemente mantenga el objeto devuelto desde AddObserver para que pueda suministrarlo a RemoveObserver.

nota: Si no he entendido bien su pregunta debe utilizar una edición y añadir algunos detalles y/o el código de lo que quiere lograr y nosotros haremos nuestro mejor esfuerzo para ayudar :-)

+0

gracias poupou, que era esperada que podría ser un método más fácil. Manteniendo una referencia en el objeto devuelto por AddObserver pude anular la suscripción a la notificación –

1

Mira el UITextFieldDelegate

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextFieldDelegate_Protocol/UITextFieldDelegate/UITextFieldDelegate.html

implementar ese protocolo. Tiene métodos de devolución de llamada para todos los cambios del campo de texto.

+0

no hay ningún evento que funcione como keypress –

+1

Pude usar el método 'textField: shouldChangeCharactersInRange: replacementString:', que * está * activado cada pulsación de tecla, lo más cerca que puedo decir. Sin embargo, lo malo es que tienes que estudiar el valor 'replacementString:', porque la propiedad 'textField.text' no se actualizará aún cuando se envíe este mensaje. – colinta

2

Como sugirió colinta, hacer esto

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSString *text = [textField.text stringByReplacingCharactersInRange:range withString:string]; 
    NSLog(@"range = %@, replacement = %@, text = %@", NSStringFromRange(range), string, text); 
    return YES; 
} 

y

- (BOOL)textFieldShouldClear:(UITextField *)textField { 
    NSLog(@"clear text"); 
    return YES; 
} 

También funcionará si la entrada fue cambiado a través de sugerencias de ortografía.

+0

Esto no funcionará si necesita responder a presionar teclas fuera del alcance de la edición del campo de texto. Por ejemplo, supongamos que necesita capturar una sola pulsación de tecla y pasar al siguiente campo. No puedes hacer eso usando este método. Tienes que usar los eventos del teclado. –

0

La forma más limpia para observar cambios UITextField es

_textField.AddTarget((sender, e) => 
{ 
    // Do your stuff in here 
}, UIControlEvent.EditingChanged); 

Usted no tiene que suscribirse a un centro de notificación de todo el sistema y usted no tiene que anular el registro de observador cuando estás destroing un campo de texto .

Esperamos que esto ayude a alguien en el futuro :)

Cuestiones relacionadas