首页 > 解决方案 > 当用户停止快速输入时如何创建函数

问题描述

我有一个 Ui 文本字段,当用户在大约 1 秒后停止输入时,我希望出现一个复选标记。我有以下代码:

   @objc func getHintsFromTextField(textField: UITextField) {
       print("Hints for textField: \(textField)")
   }
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,
    replacementString string: String) -> Bool {
    NSObject.cancelPreviousPerformRequests(
        withTarget: self,
        selector: #selector(ViewController.getHintsFromTextField),
        object: textField)
    self.perform(
        #selector(ViewController.getHintsFromTextField),
        with: textField,
        afterDelay: 3.0)
    return true
}
```    @IBAction func password3(_ sender: UITextField) {
        if textField(passwordSignUp, shouldChangeCharactersIn: NSMakeRange(5, 10), replacementString: "") == true {
            
            
            let imageView = UIImageView()
            let image1 = #imageLiteral(resourceName: "icons8-ok-28")
             imageView.image = image1
            self.passwordSignUp?.rightView = imageView
            self.passwordSignUp?.rightViewMode = UITextField.ViewMode.always
            self.passwordSignUp?.rightViewMode = .always
            errorLabel?.alpha = 0
            
        }
    }

(顺便说一下,IBAction func password3 正在开始输入)当我运行我的代码时,只要我点击文本字段,就会出现复选标记。我究竟做错了什么。

标签: swiftxcodeuitextfieldnsrange

解决方案


我会使用类似的东西:

func textFieldDidChangeSelection(_ textField: UITextField) {
    
    checkmarkImageView.isHidden = True
    
    let timer = Timer.scheduledTimer(timeInterval: 3.0, target: self, selector: #selector(fireTimer), userInfo: nil, repeats: true)
}

和:

@objc func fireTimer() {
    
    checkmarkImageView.isHidden = False
}

与其每次都创建 imageView,不如将其设置为最初隐藏的 IBOutlet。


推荐阅读