Ios Swift:检查用户输入计数以继续

Ios Swift:检查用户输入计数以继续,ios,swift,skyfloatinglabeltextfield,Ios,Swift,Skyfloatinglabeltextfield,我有一个字段,它接受通过SMS发送的验证码。发送给所有用户的代码是4位数字代码。我希望用户键入代码,输入第四位数字后,会自动检查代码(无需单击按钮),并在与预期值匹配时正确打印到控制台。如果不匹配,则将不正确的打印到console(此处使用console进行打印) 假设我的代码(为测试目的而固定)是1234,下面是我的尝试,但没有按预期工作: func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRa

我有一个字段,它接受通过SMS发送的验证码。发送给所有用户的代码是4位数字代码。我希望用户键入代码,输入第四位数字后,会自动检查代码(无需单击按钮),并在与预期值匹配时正确打印到控制台。如果不匹配,则将不正确的打印到console(此处使用console进行打印)

假设我的代码(为测试目的而固定)是1234,下面是我的尝试,但没有按预期工作:

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
    }
上面的代码在我输入数字时打印“不正确”4次,然后仅在我单击键盘上的选项卡栏后显示正确的代码(非自动检测)

谢谢你的帮助

试试这个:

步骤-1
UITextField
操作

yourtextfieldname.addTarget(self, action: #selector(self.textFieldEditingChange(_:)), for: UIControlEvents.editingChanged)
步骤-2
UITextField
方法

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")
                    }
                }
            }
        }
    }

我编写了一个演示,您可以参考:

在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"
        }

    }

}
结果是:


@Khalid我猜您在文本字段中键入1,它检查1==1234打印不正确,然后检查2=1234打印不正确,3=1234再次不正确,然后4=1234再次不正确,然后退出。最后读取1234=1234,当您单击选项卡栏时给出正确的结果。@sasquatch如果这样做,如果text.character.count==4,则可以使用@Ksjg而不是(else)来处理正确和错误的语句。@TusharSharma这不能解决它…相同的行为persists@ksjg. 你试过我的演示吗?