由于用户操作与编程设置而区分编辑已开始
Posted
技术标签:
【中文标题】由于用户操作与编程设置而区分编辑已开始【英文标题】:Distinguishing between EditingDidBegin because of user action vs programatic setting 【发布时间】:2016-01-17 16:39:40 【问题描述】:当我以编程方式设置 UITextField 的文本时,EditingChanged 操作不会发送到我的视图控制器,该操作仅在用户通过键盘更改文本时发送。
但是,当我在文本字段上调用 becomeFirstResponder() 时,它会发送 EditingDidBegin 操作。所以我不知道编辑开始是因为用户点击了 UITextField,还是因为我以编程方式进行了。你知道我如何轻松区分这两者吗?
我正在寻找一种方法来了解用户何时点击 UITextField 并且仅当用户点击它时,而不是何时调用 becomeFirstResponder。你知道一个吗?
【问题讨论】:
【参考方案1】:当我打电话给
becomeFirstResponder()
秘诀在于,当你调用becomeFirstResponder()
时,你 调用它。 您的代码正在运行。 你在掌控之中。你可以为所欲为。
因此,如果您需要 EditingChanged 处理程序知道您调用了 becomeFirstResponder()
,您只需事先记下这个事实。例如,您可以在调用becomeFirstResponder()
之前将其设置为true
的布尔属性justCalledBecomeFirstResponder
。现在,您的 EditingChanged 处理程序只需检查(并可能重置为 false
)此 Bool 属性,然后再继续。
【讨论】:
这样一个聪明而简单的想法。 :) 我会删除我的,因为你比我快 6 秒。 这是我现在拥有的,但我认为它相当不雅。我希望有一个更优雅的解决方案。请注意,EditingChanged 不需要这样的布尔值。 @rmaddy 你的表达方式比我的更优雅和简洁。你应该取消删除它。 @DanielT。我们生活在一个由 Cocoa 框架轰炸我们的事件的世界中。我们无法决定它们是什么或它们何时到达;我们必须准备好接受它们,并把它们当作现实来对待。这是处理这一特殊现实的标准技术。以上是关于由于用户操作与编程设置而区分编辑已开始的主要内容,如果未能解决你的问题,请参考以下文章