2010-03-31 7 views
2

J'ai un UITextField et je voudrais que pour chaque tap sur un personnage, le premier caractère est supprimé. Alors que j'ai juste un personnage dans mon textField à chaque fois. De plus je voudrais qu'il affiche chaque tap dans le journal de la console.supprimer le dernier caractère UITextField

Comment est-ce que je peux faire ceci?

Répondre

2

Vous devez implémenter la méthode shouldChangeCharactersInRange dans votre délégué champ texte:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange: 
        (NSRange)range replacementString:(NSString *)string{ 
    textField.text = @""; 
    return YES; 
} 

Vous devrez peut-être vérifier les valeurs de la plage et chaîne pour couvrir tous les cas possibles (comme des actions de copier/coller). Ce code définit simplement la valeur du champ de texte pour le dernier caractère tapé.

0

UITextField hérite de UIControl, de sorte que vous pouvez utiliser le mécanisme d'action cible qui fait partie de la classe UIControl:

[textField addTarget:self action:@selector(updateTextField) forControlEvents:UIControlEventValueChanged]; 

Dans la méthode d'action, vous pouvez remplacer le texte du UITextField avec seulement le dernier caractère et consigner ce caractère dans la console. Notez que depuis la modification du texte du UITextField entraînera à nouveau dans le message « updateTextField » étant envoyé une seconde fois à la cible, vous aurez besoin d'une sorte de mécanisme pour déterminer si la mise à jour ou non:

- (void)updateTextField { 
    if(updateTextField == YES) { 
     updateTextField = NO; 
     NSString *lastChar = [textField.text substringFromIndex:[textField.text length]]; 
     [textField setText:lastChar]; 
     NSLog(@"%@", lastChar); 
    } else { 
     updateTextField = YES; 
    } 
} 

Ou quelque chose comme que de toute façon ...

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

    if (textField.text.length > 8) { 
     return NO; 
    } 
    return YES; 

} 
Questions connexes