从UITextField子类捕获委托方法而不是委托

时间:2017-10-16 13:53:23

标签: ios swift uitextfield nsnotificationcenter uitextfielddelegate

我有一个UITextField子类。我需要知道文本何时发生了变化,我能够通过NotificationCenter得到它并观察.UITextFieldTextDidChange,但现在我需要知道用户点击返回按钮的时间。我能想到的唯一解决方案是将UITextField子类设置为自己的委托,但听起来并不干净。

  1. 是否有一种从子类
  2. 获取返回键事件的简洁方法
  3. UITextField子类设置为自己的委托是否可以?

2 个答案:

答案 0 :(得分:2)

在您的子类中执行

self.addTarget(self, action: #selector(returnKeyPressed), for: .editingDidEndOnExit);

查看Apples文档,您会看到UIControlEvents

  

UIControlEventEditingDidEndOnExit = 1<< 19,//'返回键'结束编辑

答案 1 :(得分:0)

您可以将viewController设置为委托。在viewDidLoad中,您可以添加此行代码。

myTextField.delegate = self

您还需要viewController的UITextFieldDelegate协议。

extension MyViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        //User tapped the return button
        return true
    }
}

我认为将委托设置为子类没有任何问题。如果你需要知道班级以外的水龙头,那么你将需要另一名代表,所以你不妨使用我的第一个解决方案。您还应该知道,如果更改委托,则不再调用子类中的代码,这可能会导致意外行为。