代码之家  ›  专栏  ›  技术社区  ›  iOSGeek

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

  •  1
  • iOSGeek  · 技术社区  · 7 年前

    我有一个 UITextField 子类。我需要知道文本什么时候发生了变化,我可以用 NotificationCenter 和观察 .UITextFieldTextDidChange 但现在我需要知道用户何时点击返回按钮。我能想到的唯一解决方案是设置 输入框 子类是它自身的委托,但它听起来不干净。

    1. 有没有一种干净的方法可以从子类中获取返回键事件
    2. 可以设置 输入框 子类是它自身的委托吗?
    2 回复  |  直到 7 年前
        1
  •  2
  •   Ladislav    7 年前

    在你的子类中do

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

    查看Apple doc,您会看到uicontrol事件

    uicontrolEventEditingDiEndonexit=1<&书信电报;19,//“回车键”结束编辑

        2
  •  0
  •   Yannick    7 年前

    您可以将viewController设置为代理。在里面 viewDidLoad 您可以添加这行代码。

    myTextField.delegate = self
    

    您还需要viewController的UITextFieldDelegate协议。

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

    我认为将委托设置为子类没有错。如果你需要知道类外的点击,那么你需要另一个委托,所以你可以使用我的第一个解决方案。您还应该注意,如果更改委托,子类中的代码将不再被调用,这可能会导致意外行为。