UITextField 委托方法不会被触发
Posted
技术标签:
【中文标题】UITextField 委托方法不会被触发【英文标题】:UITextField Delegate method doesn't get triggered 【发布时间】:2020-08-07 13:41:41 【问题描述】:我正在尝试将用户可以输入的字符数限制为 1。
class ActivationViewController: UIViewController , UITextFieldDelegate
@IBOutlet weak var activationCodeTextField1: UITextField!
override func viewDidLoad()
super.viewDidLoad()
self.activationCodeTextField1.addTarget(self, action: #selector(self.textField1DidChange(_:)), for: UIControl.Event.editingChanged)
self.activationCodeTextField1.delegate = self
@IBAction func textField1DidChange(_ sender: AnyObject)
print("TextField1DidChange")
func activationCodeTextField1(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
// You can check for other things besides length here as well.
print("isValidLength: ", isValidLength(textField: activationCodeTextField1, range: range, string: string))
return isValidLength(textField: activationCodeTextField1, range: range, string: string)
private func isValidLength(textField: UITextField, range: NSRange, string: String) -> Bool
let length = ((textField.text ?? "").utf16).count + (string.utf16).count - range.length
return length <= 1
但是,函数activationCodeTextField1
没有被触发,并且其中的这一行不打印任何内容:
print("isValidLength: ", isValidLength(textField: activationCodeTextField1, range: range, string: string))
知道我做错了什么吗?
【问题讨论】:
【参考方案1】:您不能更改委托方法的名称。正确的函数是
optional func textField(_ textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String) -> Bool
Documentation
【讨论】:
问题是我有多个文本字段。 然后检查哪个文本字段调用了委托。if textField == activationCodeTextField1
虽然你有多个文本字段,但这个方法只有在你为自己分配一个委托时才会调用。您还可以比较文本字段。【参考方案2】:
您还没有从 UITextFieldDelegate 协议中调用任何方法。请查看链接以查找 UITextFieldDelegate 协议中的方法。
https://developer.apple.com/documentation/uikit/uitextfielddelegate
【讨论】:
以上是关于UITextField 委托方法不会被触发的主要内容,如果未能解决你的问题,请参考以下文章
将 UITextField 添加到 UITableViewCell
自定义 UITextField 委托方法 shouldChangeCharactersIn 没有被调用