【问题标题】:How to create a function when the user stops typing in swift当用户停止快速输入时如何创建函数
【发布时间】:2020-07-10 17:48:44
【问题描述】:

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

【问题讨论】:

  • 能分享一下隐藏和显示对勾的代码吗?
  • @ShashankMishra 现在这就是我所有的复选标记代码。现在我只是在用户停止输入后显示它
  • 除问题外,您不得自己调用包含willdidshould 的委托方法。

标签: swift xcode uitextfield nsrange


【解决方案1】:

我会使用类似的东西:

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。

【讨论】:

  • 完美,谢谢
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-28
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2021-11-15
    • 1970-01-01
    • 2017-07-02
    相关资源
    最近更新 更多