2017-02-18 3 views
0

Ich habe ein Feld, das einen über SMS gesendeten Bestätigungscode enthält. Der Code, der an alle Benutzer gesendet wird, ist ein vierstelliger numerischer Code. Ich möchte, dass der Benutzer den Code eintippt, und nach Eingabe der 4. Ziffer wird der Code automatisch geprüft (kein Klick auf die Schaltfläche erforderlich) und korrekt gedruckt, wenn der erwartete Wert erreicht wird. Wenn nicht übereinstimmend, drucken Sie Falsch auf die Konsole (Konsole, die hier zum Drucken verwendet wird).Swift: Überprüfen Sie die Anzahl der Benutzereingaben, um fortzufahren.

den Code Angenommen, ich (fest für Testzwecke) haben 1234, unten ist mein Versuch, die Arbeit nicht wie erwartet:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 

     if let text = textField.text { 

      if let floatingLabelTextField = textField as? SkyFloatingLabelTextField { 
       if(text.characters.count > 4) { 
        floatingLabelTextField.errorMessage = "code is invalid" 
       } 
       else { 
        // The error message will only disappear when we reset it to nil or empty string 
        floatingLabelTextField.errorMessage = "" 
        let smsInputCode = Int(self.verificationTextField.text!) 
        if(smsInputCode == self.smsSampleCode) 
        { 
         print("Correct Code") 
        }else{ 
         print("Incorrect Code") 
        } 
       } 
      } 
     } 
     return true 
    } 

Der obige Code druckt „falsch“ 4 mal wie ich eingeben bin Die Ziffern zeigen dann den richtigen Code erst, nachdem ich auf die Tab-Leiste der Tastatur geklickt habe (nicht automatische Erkennung).

Schätzen Sie Ihre Hilfe.

+0

@Khalid i Sie 1 in Textfeld eingeben denke, es prüft 1 == 1234 druckt falsch dann gleich für 2 = 1234 Druck falsch, 3 = 1234 wieder falsch dann 4 = 1234 wieder falsch und dann verlassen. Dann zuletzt liest 1234 = 1234 gibt Ihnen richtig, wenn Sie Tab-Leiste klicken. –

+0

@sasquatch Wenn das gemacht wird, wie würde das mit korrekten und falschen Aussagen helfen? – ksjg

+0

@Ksjg Anstelle von (else) können Sie else verwenden, wenn text.character.count == 4. –

Antwort

0

Ich schreibe eine Demo können Sie beziehen sich auf:

Im Viewcontroller:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var textField: UITextField! 

    @IBOutlet weak var label: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     textField.addTarget(self, action: #selector(textFieldAction), for: .editingChanged) 


    } 

    func textFieldAction() { 

     if (textField.text?.characters.count)! > 4 { 

      let lengh = textField.text?.characters.count 

      let str:NSString = textField.text! as NSString 

      textField.text = str.substring(to: lengh! - 1) 
     } 

     if textField.text == "1234" { 
      label.text = "valid" 
     }else { 
      label.text = "invalid" 
     } 

    } 

} 

Das Ergebnis:

enter image description here

0

Versuchen Sie folgendes:

Step - 1
UITextField Aktion

yourtextfieldname.addTarget(self, action: #selector(self.textFieldEditingChange(_:)), for: UIControlEvents.editingChanged) 

Step - 2
UITextField Methode

func textFieldEditingChange(_ textField:UITextField) { 
     //self.columnValue[textField.tag] = textField.text! 
     if let text = textField.text { 
      if let floatingLabelTextField = textField as? SkyFloatingLabelTextField { 
       if(text.characters.count > 4) { 
        floatingLabelTextField.errorMessage = "code is invalid" 
      } 
      else { 
       // The error message will only disappear when we reset it to nil or empty string 
       floatingLabelTextField.errorMessage = "" 
       let smsInputCode = Int(text) 
        if(smsInputCode == self.smsSampleCode) 
        { 
         print("Correct Code") 
        }else{ 
         print("Incorrect Code") 
        } 
       } 
      } 
     } 
    } 
Verwandte Themen