我有一个UIAlertController
和一个textField
。由于我不能为textField
创建一个插座,我必须找到另一种方法来获得一个实时观察用户输入的功能。
我已经做了一些尝试,但是没有成功。这个线程解释了如何向textField添加目标:
How do I check when a UITextField changes?
textfield.addTarget(self, action: #selector(ViewControllerr.textFieldDidChange(_:)), for: UIControl.Event.editingChanged)
我尝试了这个,但不太明白#selector
输入.它想要我的UIViewController?
还是我的UIAlertController
我尝试了两个,但得到了相同的错误信息:Value of type 'UIViewController' has no member 'textFieldDidChange'
与UIAlertController
相同。
我还尝试将我的textField
设置为委托访问该类的函数:
textField.delegate = self as? UITextFieldDelegate
但我想这不是正确的方法,因为我仍然无法访问任何功能,除非执行以下操作:
textField.delegate?.textFieldDidBeginEditing?(textField)
但那也没给予我什么。
我还尝试添加一个扩展名,如下所示:
extension UITextFieldDelegate {
func textFieldDidBeginEditing(_ textField: UITextField) {
print("🦋EDITING")
}// became first responder
func textFieldDidEndEditing(_ textField: UITextField) {
print("🦋EDITING")
}
}
但由于某种原因,我无法通过textView
访问它们
如果我像这样扩展类:
extension PickNumberViewController: UITextFieldDelegate {...}
我收到相同的错误消息
Value of type 'UITextField' has no member 'textFieldDel...'
这没有意义,因为我将textField
设置为UITextFieldDelegate
而不是UITextField
。
如果您也想查看我的代码,请告诉我。
3条答案
按热度按时间bfnvny8b1#
可以尝试使用
self.textF = alert.textFields?[0]
获取对它的引用e4eetjau2#
你不需要保存对文本字段的引用,你可以在
addTextField
闭包中添加target或者设置delegate,如下所示。xcitsw883#
iOS13+一种选择是使用
UIAction
这样使用:
但是,您不应该使用
onEditingDidEnd
来进行最终验证,请将其放入UIAlertAction
中,作为“OK”按钮,然后取出textFields: