【问题标题】:How does one handle a text change event for a UITextField with Swift 4?如何使用 Swift 4 处理 UITextField 的文本更改事件?
【发布时间】:2018-07-24 23:48:25
【问题描述】:

从 Objective C 到更高版本的 swift,我已经成功地使用 editingChanged 方法来检测 UITextField 中的文本何时更改。

但它似乎在 Swift 4 中不起作用。

我还尝试了以下几个在线文档:

textField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: UIControlEvents.editingChanged)

而且这也无法命中提供的“@objc”函数。

现在当然有 shouldChangeCharactersIn 委托方法,但这里的限制是它在文本更改发生之前而不是之后运行,这意味着在它返回之前不会发生任何变异。

如果有任何想法,我将不胜感激,非常令人沮丧的是,对核心组件的这种微不足道的访问是如此难以捉摸。

【问题讨论】:

  • 可能是您在 shouldChangeCharactersIn 内返回 false
  • 感谢您的想法@Sh_Khan,但我可以确认shouldChangeCharactersIn 确实有效,根据问题,它只是在文本更改之前而不是之后被命中。
  • @JohnDoe 是的,它可以工作,但如果你在其中返回 false,那么即使正确实现也不会调用 textFieldDidChange

标签: objective-c swift uitextfield swift4


【解决方案1】:

这应该可行:

textField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)

然后使用:

@objc func textFieldDidChange(_ textField: UITextField) { 
  //do whatever
}

我目前正在我的一个应用中使用它。

如果它不起作用,还有另一个问题,例如在shouldChangeCharactersIn 中返回 false,您必须显示更多代码才能调试。

【讨论】:

    【解决方案2】:

    请使用 textField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .valueChanged) 而不是 UIControlEvents.editingChanged

    【讨论】:

      猜你喜欢
      • 2011-10-24
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2017-09-21
      • 2014-11-03
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      相关资源
      最近更新 更多