2010-06-27 18 views
9

En mi aplicación tengo un campo de texto que requiere un número de entrada del usuario, por lo que configuro el tipo de teclado como "Number Pad" pero ahora estoy atascado en cuanto a cómo descartarlo cuando el usuario finaliza la entrada. Sé que tengo que usar el método de delegado "textfieldShouldReturn" pero el problema es que el teclado numérico no tiene una clave de retorno. ¿Es necesario agregar una tecla personalizada en el teclado o hay alguna otra salida?despidiendo Number Pad

+0

posible duplicado de [¿Cómo mostrar el botón 'Hecho' en el teclado numérico en el iPhone?] (Http://stackoverflow.com/questions/584538/how-to-show-button-done-on-number-pad- en-iphone) – kennytm

+0

pero Kenny en esa ans se menciona que tenemos que agregar la clave de retorno, quiero saber, no podemos hacerlo sin agregar la tecla – Siddharth

+0

Por supuesto, puede hacerlo sin la tecla Listo, solo cree un método para '- resignFirstResponder' (como en [@PurplePilot] (http://stackoverflow.com/questions/3127104/dismissing-number-pad/3127138#3127138) 's respuesta.) – kennytm

Respuesta

6

es necesario agregar un fondo del grifo

-(IBAction)backGroundTap:(id)sender 

en el punto h y luego en el archivo dot m

-(IBAction)backGroundTap:(id)sender 
[nameField resignFirstResponder]; 
[numberField resignFirstResponder]; 
+0

thx Púrpura ....... pero ¿qué es backgroundtap y nameField es el nombre de textfield? y ¿qué es nameField aquí? – Siddharth

+1

UITapGestureRecognizer * tapBackground = [[UITPGestureRecognizer alloc] initWithTarget: acción propia: @selector (tapBackground :)]; [self.view addGestureRecognizer: tapBackground]; –

+0

Para agregar un fondo toque el reconocedor de gestos –

41

Otra solución - Añadir inputAccessoryView a yourNumberTextFiled

inputAccessoryView

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)]; 
    numberToolbar.barStyle = UIBarStyleBlackTranslucent; 
    numberToolbar.items = [NSArray arrayWithObjects: 
         [[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelNumberPad)], 
         [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], 
         [[UIBarButtonItem alloc]initWithTitle:@"Apply" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)], 
        nil]; 
    [numberToolbar sizeToFit]; 
    numberTextField.inputAccessoryView = numberToolbar; 
} 

-(void)cancelNumberPad{ 
    [numberTextField resignFirstResponder]; 
    numberTextField.text = @""; 
} 

-(void)doneWithNumberPad{ 
    NSString *numberFromTheKeyboard = numberTextField.text; 
    [numberTextField resignFirstResponder]; 
} 
+1

genial, muchas gracias por eso. – CroiOS

+1

Esta es la mejor solución – Shailesh

4

Si conoce la longitud del número que se va a ingresar (p. un PIN de 4 dígitos) puede descartar automáticamente el teclado después de ingresar 4 teclas.

yo golpean un problema de renunciar al primer nivel de respuesta después de 4 teclas (sería ignorar la última pulsación de tecla que ya envió SÍ después de renunciar, por lo que añade un retardo asíncrono a la renuncia.

Este es el código de la delegada UITextField :

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 

    // max 4 keypresses 
    if(range.location == 3){ 
     // async workaround for can't return YES after resignFirstResponder 
     [self performSelector:@selector(closeKeypad:) 
        withObject:textField 
        afterDelay:0.1 
     ]; 
    } 
    else if(range.location > 3){   
     return NO; 
    } 
    return YES; 
} 

-(void) closeKeypad:(UITextField*)textField { 
    [textField resignFirstResponder]; 

} 
+0

Esto era exactamente lo que estaba buscando, ¡gracias! – Tander

+0

De nada. – scipilot

+0

¡Agradecido por esto! Gracias :) –

0

Otra solución que es bastante fácil de aplicar, y está trabajando para cambiar el foco de entrada o para despedir el teclado

implementar esta función (y el delegado UITextFieldDelegate.):

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; 

Entonces, cuando se desea ocultar el teclado o cambiar el foco, sólo hay que llamar a un notificador de esa manera:

[self performSelector:@selector(focusNextField:) withObject:textField afterDelay:0.1]; 

Y, por último, ocultar el teclado en este caso:

- (void) focusNextField:(UITextField *) textField 
{ 
    [textField resignFirstResponder]; 
    // some code 
} 

¡Nada más!

Cuestiones relacionadas