如何在用户停止输入 swift 时创建函数

How to create a function when the user stops typing in swift

我有一个 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 正在开始输入) 当我 运行 我的代码点击文本字段时,复选标记就会出现。我做错了什么。

我会使用类似的东西:

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。

请注意,您在这里使用 shouldChangeCharactersIn 是完全错误的;如果您的目标是收到用户已更改文本的通知,那么 textDidChangeNotification 就是这样做的。如果您使用 Combine 框架订阅该通知并应用 debounce 运算符,那么您尝试做的事情就变得微不足道了。