由于用户操作与编程设置而区分编辑已开始

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 框架轰炸我们的事件的世界中。我们无法决定它们是什么或它们何时到达;我们必须准备好接受它们,并把它们当作现实来对待。这是处理这一特殊现实的标准技术。

以上是关于由于用户操作与编程设置而区分编辑已开始的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu文件类型没有颜色区分,如何解决

尝试编辑用户操作上的特定嵌入字段

Android - 由于设置撤销了位置权限导致应用崩溃

如何区分SQL SEVER 2000中的角色、权限、对象、用户之间的关联?

idea里面颜色注释可以设置多少次

将占位符添加到 UITextField,如何以编程方式快速设置占位符文本?