我发现向textField添加手势识别器非常简单,即textField.EditingDidBegin // textField.EditingDidEnd等。
但是,我创建了一个新的视图控制器,扩展了一个UIView,它包含一个textField,我在很多地方使用它。
我需要创建一个新的手势识别器来更改我的类中包含的UITextField上的EditingDidBegin // EditingDidEnd的行为。我正在努力解决这个问题,因为我不知道如何覆盖已经附加到文本字段的手势识别器,以及无法从另一个类访问该TextField(显然)
答案 0 :(得分:0)
假设您有自定义视图,例如MyView: UIView
并在另一个ViewController
中使用它。
声明协议以处理来自ViewController
的另一个View
或MyView
中的TextField事件。
protocol MyViewDelegate {
func fieldBeginEditin(_ aTextField: UITextField)
func fieldEndEditin(_ aTextField: UITextField)
}
您的自定义视图
class MyView: UIView, UITextFieldDelegate {
//assume you have textfield object here
var _textField: UITextField!
var delegate: MyViewDelegate?
override func awakeFromNib() {
super.awakeFromNib()
setupInterface()
}
func setupInterface() {
if _textField == nil {
_textField = UITextField(frame: .zero)
_textField.delegate = self
}
}
func textFieldDidEndEditing(_ textField: UITextField) {
delegate?.fieldEndEditin(textField)
}
func textFieldDidBeginEditing(_ textField: UITextField) {
delegate?.fieldEndEditin(textField)
}
}
处理已添加自定义视图的文本字段事件
class ViewController: UIViewController, MyViewDelegate{
var myView = MyView(frame: .zero)
override func viewDidLoad() {
super.viewDidLoad()
myView.delegate = self
}
func fieldEndEditin(_ aTextField: UITextField) {
print(#function)
}
func fieldBeginEditin(_ aTextField: UITextField) {
print(#function)
}
}
注意:强> 使用C#代码
应用相同的逻辑