在 UITextView 中定义后取消选择单词

Posted

技术标签:

【中文标题】在 UITextView 中定义后取消选择单词【英文标题】:Deselect word after Define in UITextView 【发布时间】:2012-12-20 18:24:51 【问题描述】:

我有一个UIViewController,它的视图中有UITextView。当用户选择文本时,会有Define 系统菜单项使用UIReferenceLibraryViewController 来定义单词。问题是在字典被解散后单词仍然被选中。我希望它被取消选择(就像在 iBooks 中所做的那样)。

我尝试使用UIMenuControllerDidHideMenuNotification 取消选择该单词:

[[NSNotificationCenter defaultCenter] addObserverForName:UIMenuControllerDidHideMenuNotification object:nil queue:nil usingBlock:^(NSNotification *notification) 
    [textView setSelectedRange:NSMakeRange(0, 0)];
];

这会取消选择单词,但也会冻结我的UIViewController,并显示以下消息:

2012-12-20 19:18:45.553 Pilcrow[7018:c07] Warning: Attempt to dismiss from view controller <_UIFallbackPresentationViewController: 0x75b8300> while a presentation or dismiss is in progress!
2012-12-20 19:18:45.963 Pilcrow[7018:c07] Unbalanced calls to begin/end appearance transitions for <_UIFallbackPresentationViewController: 0x75b8300>.

有什么想法吗?

【问题讨论】:

如果您删除选择代码,它不会被冻结?我想,你有另一个问题..?只需将您显示给我们的行注释掉,然后再试一次。 不。当我不做setSelectedRange 时,一切正常。 你试过在主线程上显式调用它吗?例如dispatch_async on dispatch_get_main_queue() 不。请给我一个具体的代码好吗? 顺便说一句,我刚刚尝试过performSelectorOnMainThread:,但还是一样。 :( 【参考方案1】:

解雇可能需要大约 0.25-0.33 秒。那么在这段时间之后做一个performSelectorAfterDelaydispatch-after 怎么样?

【讨论】:

可能是,但它仍然可能在动画块或运行循环结束之前。在某些情况下,didHide 过早触发。

以上是关于在 UITextView 中定义后取消选择单词的主要内容,如果未能解决你的问题,请参考以下文章

UITextView 设置属性后做啥?

当用户在 UITextView 中选择特定单词时

在 UITextview 中获取被点击的单词

Swift 代码,将打印在 UITextView 中键入的新单词的所有字符的字符串,因为它们正在被键入

Ipad dev:在 UITextview 中弹出单词

长按 UITextView 中的电话号码后,不会出现来自 UIActionSheet 的取消按钮