Question

J'ai 10 champs de texte, chacun pouvant contenir au plus un caractère.Lorsque j'entre un caractère dans le premier champ de texte, le focus doit automatiquement passer au champ de texte suivant et ainsi de suite.Autrement dit, dès que le premier caractère est entré dans un champ de texte, le focus doit passer au suivant.Autrement dit, le champ de texte suivant devrait devenir le premier répondeur.J'ai écrit le code ci-dessous, utilisé la méthode déléguée textfield.

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

NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"];

for (int i = 0; i < [string length]; i++) {
    unichar c = [string characterAtIndex:i];
    if([myCharSet characterIsMember:c])
    {
        int previousTag = textField.tag;


        if([textField.text length] > 0)
        {
            if((previousTag == 9) && ([textField10.text length] >0))
            {
                return NO;
            }
            UITextField *tempField=(UITextField *)[self.view viewWithTag:previousTag+1]; 
            if([tempField.text length] > 0){
                [tempField resignFirstResponder];
                return NO;
            }
            [tempField becomeFirstResponder];
            return YES;
        }

    }
    else{
        return NO;
    }
}


return YES;
}

Mais je n'obtiens pas les résultats escomptés.Lorsque je tape un caractère, il est entré dans le premier champ de texte, mais que le focus ne passe pas au suivant, bien que lorsque je tape le deuxième caractère, il est entré dans le champ de texte suivant.

De la même manière, j'ai besoin d'écrire une fonction de suppression de telle sorte que lorsque je supprime un champ de texte, le focus passe automatiquement au champ de texte précédent.

Toutes les réponses seront appréciées.Merci.

Était-ce utile?

La solution

Vous pouvez toujours renvoyer NON et modifier le texte textField manuellement.Je suppose que vous avez besoin de quelque chose comme ça.

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

NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"];
int previousTag = textField.tag;

if ([string isEqualToString:@""]) {//backspace button
    if (previousTag==0) {//added to prevent crashing in first tf
        return YES;
    }
  UITextField *tempField2=(UITextField *)[self.view viewWithTag:previousTag-1]; 

    textField.text=string;
    [tempField2 becomeFirstResponder];
    return NO;

}
for (int i = 0; i < [string length]; i++) {
    unichar c = [string characterAtIndex:i];
    if([myCharSet characterIsMember:c])
    {
        if((previousTag == 9) && ([textField10.text length] >0))
        {
            return NO;
        }

        UITextField *tempField=(UITextField *)[self.view viewWithTag:previousTag+1]; 
        if([tempField.text length] > 0)
        { 
            textField.text=string;
            [tempField resignFirstResponder];
            return NO;
        }
        textField.text=string;
        [tempField becomeFirstResponder];
        return NO;

    }
    else{
        return NO;
    }


}


return YES;
}

Autres conseils

-shouldChangeCharactersInRange est appelé avant que le champ de texte ne modifie réellement son texte.Ainsi, vous obtiendrez l'ancienne valeur dans la chaîne.Ajoutez la ligne au début de votre méthode.Cela devrait résoudre votre problème.

string = [textField.text stringByReplacingCharactersInRange:range withString:string];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top