自 iOS 7 中的删除(退格)操作以来,我如何才能不接收 UITextView 委托消息?

Posted

技术标签:

【中文标题】自 iOS 7 中的删除(退格)操作以来,我如何才能不接收 UITextView 委托消息?【英文标题】:How can I not to receive UITextView's delegate message since delete(backspace) action in iOS7? 【发布时间】:2013-11-13 07:38:35 【问题描述】:

我使用以下委托来接收任何键盘更改操作。到目前为止,直到 ios 6 都没有问题,但我在 iOS 7 中遇到了一个问题。

- (void)textViewDidChange:(UITextView *)textView

我的应用应该支持韩语。

我可以用简单的例子来解释问题,以便于理解。

[动作流程] 1) '러러' 现在显示在 UITextView 中。 2) 用户触摸删除键一次。 3) '러러' 改为 '럴'。

我希望只调用一次 [(void)textViewDidChange:(UITextView *)textView]。它在 iOS 6 下运行良好!

然而,在 iOS 7 中,委托被调用 三次,就像该流程一样

'러러' --> '러' '러' --> 空 空 --> '럴'

我的应用程序正在仔细处理委托以控制 UITextView 的文本内容。因此,我不想收到有关中间步骤的委托消息。

简单地说,我真的很想使用 UITextView 及其委托,就像它在 iOS 6 下的工作方式一样。

【问题讨论】:

听起来像是 UITextView 的 bug,打开雷达,得到苹果工程师的反馈。radar.apple.com 您能说出您在代码中设置委托的位置吗? @sathiamoorthy 有一个视图控制器有一个 UITextView。 viewcontroller 设置为 UITextView 的委托。它还实现了 UITextView 的委托。 没有。我在问,是在 ViewDidLoad 还是在 cellForRowAtIndexPath 中。 【参考方案1】:

您可以使用以下代码,

[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(methodNothing)
 name:UITextFieldTextDidChangeNotification
 object:firstName];

您可以使用:UITextFieldTextDidBeginEditingNotificationUITextFieldTextDidEndEditingNotification

【讨论】:

别忘了移除观察者 通知对代表的工作方式相同。我需要忽略中间过程。

以上是关于自 iOS 7 中的删除(退格)操作以来,我如何才能不接收 UITextView 委托消息?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 6 UITextField Secure - 如何检测退格清除所有字符?

自firebase以来删除标记时删除

我如何编写一种方法来“退格”文本文档中的一行

如何连续删除键盘退格键上的字符长按android

当TextWatcher存在时退格/删除时按EditText光标位置

访问表单中的退格删除所有记录