120 votes

À l’aide de ' textField:shouldChangeCharactersInRange :', comment puis-je obtenir le texte, y compris le caractère typé actuel ?

Je suis à l'aide du code ci-dessous pour essayer de l'avoir textField2s'du texte contenu mis à jour pour correspondre textField1'chaque fois que l'utilisateur tape dans textField1.

- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string {    
  if (theTextField == textField1){    
     [textField2 setText:[textField1 text]];    
  }
}

Toutefois, la sortie j'observe, c'est que...

textField2 est "12", quand textField1 est "123"

textField2 est "123", quand textField1 "1234"

... quand est ce que je veux:

textField2 est "123", quand textField1 est "123"

textField2 est "1234", quand textField1 "1234"

Ce que je fais mal?

273voto

Vladimir Points 110327

``champ de texte appelé avant modifie en fait son texte, c’est pourquoi vous obtenez l’ancienne valeur de texte. Pour obtenir le texte après mise à jour utilisent :

53voto

btmanikandan Points 666
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString * searchStr = [textField.text stringByReplacingCharactersInRange:range withString:string];

    NSLog(@"%@",searchStr);
    return YES;
}

26voto

tomute Points 1583

Au lieu d’utiliser la UITextFieldDelegate, essayez d’utiliser « changé pour le montage » événement de UITextField.

5voto

Deepak Danduprolu Points 33605

C’est le code dont vous avez besoin,

0voto

Bogdan Weidmann Points 755

Ma solution est d’utiliser `` .

N’oubliez pas d’appeler en méthode.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X