在 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 秒。那么在这段时间之后做一个performSelectorAfterDelay
或dispatch-after
怎么样?
【讨论】:
可能是,但它仍然可能在动画块或运行循环结束之前。在某些情况下,didHide 过早触发。以上是关于在 UITextView 中定义后取消选择单词的主要内容,如果未能解决你的问题,请参考以下文章