如何在用户停止输入 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
运算符,那么您尝试做的事情就变得微不足道了。
我有一个 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
运算符,那么您尝试做的事情就变得微不足道了。