wake-up-neo.com

iPhone Wie bekomme ich TextField-Text beim Tippen?

Ich versuche, Änderungen an einer UITextField auf einer separaten UILabel anzuzeigen. Gibt es eine Möglichkeit, nach jedem Zeichen, das der Benutzer eingibt, den vollständigen Text der UITextField zu erfassen? Derzeit verwende ich diese Methode, erfasst jedoch nicht das letzte Zeichen, das der Benutzer eingegeben hat. 

Ich weiß, dass UITextView die Methode "didChange" hat, aber ich konnte diese Methode für eine UITextField nicht finden. 

//does not capture the last character

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

        [self updateTextLabelsWithText: textField.text];

    return YES;
}

Wie kann ich nach jedem eingegebenen Zeichen Text aus UITextField herausnehmen?

Vielen Dank!

60
Alex Stone
  1. Fügen Sie zunächst eine UITextField und UILabel zu Storyboard/Feder hinzu
  2. Jetzt IBOutlet für UILabel zuweisen (Hier habe ich myLabel verwendet)
  3. Weisen Sie UITextFieldDelegate dem Dateieigentümer zu. Implementieren Sie denselben Delegaten ebenfalls in der .h-Datei
  4. Verwenden Sie diese Codezeilen:

    - (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];
    }
    

Hoffe das hilft.

140
Mrunal

Behandeln Sie einfach das Event "Editing Changed"

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

und der Wähler:

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

Sie können dies manuell oder mit dem Storyboard durch STRG-Ziehen durchführen. Das Sent-Ereignis "Bearbeitung geändert" wird in Ihre .h-Datei gezogen, wodurch die Methode "itingChanged "für Sie erstellt wird.

68
Fabs

In 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
 }

}

Hoffe, es hilft dir, schnelle Pioniere

5
ColossalChris

Swift mit addTarget Swift 2.0+

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

Und implementiere selector

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

In Swift 3.0:

Einige dieser Lösungen waren ein Zeichen hinter oder für frühere Versionen von Swift und Obj-C. Hier ist was ich für Swift 3.0 verwende

In der Klasse habe ich einen Platzhalter zum Speichern des Textes deklariert.

var tempName = ""

In ViewDidLoad habe ich verwendet:

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

Dann habe ich eine Funktion namens gemacht:

   func typingName(textField:UITextField){

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

Swift 3.0+: Das hat für mich sehr gut funktioniert.

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