web-dev-qa-db-fra.com

iPhone comment obtenir du texte TextField en tapant?

J'essaie de montrer les modifications apportées à une UITextField sur une UILabel séparée. Existe-t-il un moyen de capturer le texte intégral de la UITextField après chaque caractère saisi par l'utilisateur? Actuellement, j'utilise cette méthode, mais elle ne capture pas le dernier caractère saisi par l'utilisateur. 

Je sais que UITextView a la méthode "didChange", mais je ne pouvais pas trouver cette méthode pour un UITextField

//does not capture the last character

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

        [self updateTextLabelsWithText: textField.text];

    return YES;
}

Comment puis-je extraire du texte dans UITextField après chaque caractère entré?

Je vous remercie!

60
Alex Stone
  1. Ajoutez d’abord une UITextField et UILabel au storyboard/nib
  2. Assignez maintenant IBOutlet pour UILabel (Ici j'ai utilisé myLabel )
  3. Attribuez UITextFieldDelegate au propriétaire du fichier, implémentez également le même délégué dans un fichier .h
  4. Utilisez ces lignes de code:

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
        [self updateTextLabelsWithText: newString];
    
        return YES;
    }
    
    -(void)updateTextLabelsWithText:(NSString *)string
    {
         [myLabel setText:string];
    }
    

J'espère que cela t'aides.

140
Mrunal

Il suffit de gérer l'événement "Modification modifiée"

[textField addTarget:self 
              action:@selector(editingChanged:)
    forControlEvents:UIControlEventEditingChanged];

et le sélecteur:

-(void) editingChanged:(id)sender {
   // your code
}

Vous pouvez le faire manuellement ou avec le storyboard en faisant CTRL-Glisser l'événement envoyé "Modification modifiée" vers votre fichier .h, en créant la méthode éditionChanged pour vous.

68
Fabs

Dans Swift 2.0+

 class CheckInViewController: UIViewController, UITextFieldDelegate {

 override func viewDidLoad() {
    super.viewDidLoad()

    yourTextField.delegate = self

 }

 func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {
    var updatedTextString : NSString = textField.text as NSString
    updatedTextString = updatedTextString.stringByReplacingCharactersInRange(range, withString: string)

    self.methodYouWantToCallWithUpdatedString(updatedTextString)
    return true
 }

}

J'espère que cela vous aide pionniers rapides

5
ColossalChris

Swift avec addTarget Swift 2.0+

   titleTextField.addTarget(self, action: #selector(textFieldTyping), forControlEvents: .EditingChanged)

Et implémenter selector

func textFieldTyping(textField:UITextField)
{
    //Typing
}
5
UnRewa

Dans Swift 3.0:

Certaines de ces solutions avaient un caractère de retard ou des versions antérieures de Swift et Obj-C. Voici ce que j'utilise pour Swift 3.0

Dans la classe, j'ai déclaré un espace réservé pour stocker le texte.

var tempName = ""

Dans ViewDidLoad, j'ai utilisé:

nameField.addTarget(self, action: #selector(typingName), for: .editingChanged)

Puis j'ai créé une fonction appelée:

   func typingName(textField:UITextField){

        if let typedText = textField.text {
            tempName = typedText
            print(tempName)
        }
    }
1
Dave Levy

Swift 3.0+: Cela a très bien fonctionné pour moi.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    self.yourLabel.text = "\(textField.text ?? "")\(string)"
    return true
}
0
dsunku
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if textField == yourTextFieldOutletName
        {
           if yourTextFieldOutletName.isEmpty == false
           {
             youtlabelname.text = yourTextFieldOutletName.text!
            }


        }

        return true

    }

func textViewDidEndEditing(_ textView: UITextView) {
       if textField == yourTextFieldOutletName
            {
               if yourTextFieldOutletName.isEmpty == false
               {
                 youtlabelname.text = yourTextFieldOutletName.text!
                }


            } 
    }
0
Rob-4608