为iOS UIView获取包含textField的键盘事件

时间:2018-03-26 09:40:53

标签: c# ios

我发现向textField添加手势识别器非常简单,即textField.EditingDidBegin // textField.EditingDidEnd等。

但是,我创建了一个新的视图控制器,扩展了一个UIView,它包含一个textField,我在很多地方使用它。

我需要创建一个新的手势识别器来更改我的类中包含的UITextField上的EditingDidBegin // EditingDidEnd的行为。我正在努力解决这个问题,因为我不知道如何覆盖已经附加到文本字段的手势识别器,以及无法从另一个类访问该TextField(显然)

1 个答案:

答案 0 :(得分:0)

假设您有自定义视图,例如MyView: UIView并在另一个ViewController中使用它。

声明协议以处理来自ViewController的另一个ViewMyView中的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#代码

应用相同的逻辑