2010-06-27 5 views
9

Dans mon application j'ai un champ de texte qui prend un certain nombre de saisie de l'utilisateur, donc je mets le type de clavier à "pavé numérique" mais maintenant je suis coincé sur la façon dont je devrais le rejeter. Je sais que je dois employer la méthode de délégué "textfieldShouldReturn" mais le problème est que le pavé numérique n'a pas une clef de retour. Est-il nécessaire d'ajouter une clef faite sur commande au clavier ou il y a un autre moyen de sortir?ignorer Numéro Pad

+0

duplicata possible de [Comment afficher le bouton 'Terminé' sur le pavé numérique de l'iPhone?] (Http://stackoverflow.com/questions/584538/how-to-show-button-done-on-number-pad- on-iphone) – kennytm

+0

mais Kenny en ce qu'il est mentionné que nous devons ajouter la clé de retour je veux savoir que nous ne pouvons pas le faire sans ajouter la clé – Siddharth

+0

Bien sûr, vous pouvez le faire sans la touche Terminé, il suffit de créer une méthode resignFirstResponder' (comme dans [@PurplePilot] (http://stackoverflow.com/questions/3127104/dismissing-number-pad/3127138#3127138) la réponse.) – kennytm

Répondre

6

Vous devez ajouter un robinet d'arrière-plan

-(IBAction)backGroundTap:(id)sender 

dans le point h puis dans le fichier dot m

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

thx Purple ....... mais qu'est ce que backgroundtap et nameField est le nom de textfield? et qu'est-ce que nameField ici? – Siddharth

+1

UITapGestureRecognizer * tapBackground = [[UITapGestureRecognizer alloc] initWithTarget: action de soi: @selector (tapBackground :)]; [self.view addGestureRecognizer: tapBackground]; –

+0

Pour ajouter un arrière-plan, appuyez sur reconnaissance des gestes –

41

Une autre solution - Ajouter inputAccessoryView à 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

super, merci beaucoup pour cela. – CroiOS

+1

Ceci est la meilleure solution – Shailesh

4

Si vous connaissez la longueur du numéro à saisir (par ex. un code PIN à 4 chiffres) vous pouvez supprimer automatiquement le clavier après 4 touches saisies.

je frappe un problème démissionnant le premier intervenant après 4 touches (il ignorerait la dernière pression de touche si vous êtes retourné OUI après sa démission, alors j'ai ajouté un retard async à sa démission.

Ce code est le délégué 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

C'était exactement ce que je cherchais, merci! – Tander

+0

De rien. – scipilot

+0

Reconnaissant pour ça! Je vous remercie :) –

0

Une autre solution qui est assez facile à mettre en œuvre et qui travaille pour changer la mise au point d'entrée ou pour rejeter le clavier

implémenter cette fonction (et le délégué UITextFieldDelegate):.

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

Ensuite, lorsque vous voulez rejeter le clavier ou changer la mise au point, il vous suffit d'appeler un notificateur comme ça:

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

Enfin, rejeter le clavier sur celui-ci:

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

Rien d'autre!