【问题标题】:How can i send textDidChangeNotification to NotificationCenter?如何将 textDidChangeNotification 发送到 NotificationCenter?
【发布时间】:2020-07-02 21:53:42
【问题描述】:

我正在学习 swift 和组合框架。

我有一个文本字段 (textField) 和一个按钮 (button)。

UITextField.textDidChangeNotification 出现在 NotificationCenter 中时,我使用组合框架做某事。

let publisher = NotificationCenter.default.publisher(for:
   UITextField.textDidChangeNotification, object: self.textField)
//more code

...一切正常。

我为按钮添加了一项功能 - 单击它时应该会更改 textField 中的文本,我可以看到文本已更改,但没有任何反应,例如没有 textDidChangeNotification

如何强制发送 UITextField.textDidChangeNotification?当我用其他功能/按钮更改文本时,没有 textDidChangeNotification(用户没有更改文本 => 没有 textDidChangeNotification)。

【问题讨论】:

    标签: swift swift3 combine


    【解决方案1】:

    这是一个有趣的场景。浏览一些class UITextField : UIControl 文档,看起来这是从用户那里收集基于文本的输入。

    当您按下按钮时,系统会更新文本属性而不是用户,因此它不会调用 textDidChange。我不确定是否有强制执行此调用的方法,但是您可以将该函数中的代码添加到您的按钮中。

    【讨论】:

    • 是的,我可以复制到按钮,但这绝对是一个糟糕的解决方案——我必须复制相同的代码部分。
    • 您可以创建自己的函数,然后在需要的地方调用函数,而不是尝试使用 tetdidchange 函数。防止您使用重复的代码。 @JanekWojciechowski
    【解决方案2】:

    当然,我可以为给定手动发布通知:Notification.Name 和对象:

    NotificationCenter.default.post(name: UITextField.textDidChangeNotification, object: self.textField)
    

    【讨论】:

      猜你喜欢
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 2011-04-09
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多