在我的项目中,有一个关于UITextView的需求。当我点击UITextView中的链接时,我们的应用程序应该打开一个webview控制器来显示链接的内容;当我长按UITextView中的链接时,我们的应用程序应显示一些关于复制和粘贴的菜单。现在我可以在UIInputViewDelegate中实现第二种情况
(BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
虽然触发了shouldInteractWithURL,但我无法识别tap事件和长按事件之间的相对标记。
然后我在
结尾处断点(BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
方法,我使用lldb查找有关点击事件和长按事件的一些信息,如下所示:
长记事件:
frame #1: 0x0000000112b46214 UIKit`-[_UITextViewInteractableLink allowInteraction] + 165
frame #2: 0x0000000112b452c3 UIKit`-[_UITextViewInteractableItem handleLongPress] + 22
frame #3: 0x0000000112b45055 UIKit`-[UITextView(LinkInteraction) validateInteractionWithLinkAtPoint:] + 287
frame #4: 0x00000001125edac9 UIKit`-[UITextInteractionAssistant(UITextInteractionAssistant_Internal) longDelayRecognizer:] + 281
frame #5: 0x00000001125dbb28 UIKit`_UIGestureRecognizerSendTargetActions + 153
点击事件:
frame #1: 0x0000000112b46214 UIKit`-[_UITextViewInteractableLink allowInteraction] + 165
frame #2: 0x0000000112b45181 UIKit`-[_UITextViewInteractableItem handleTap] + 33
frame #3: 0x0000000112b45055 UIKit`-[UITextView(LinkInteraction) validateInteractionWithLinkAtPoint:] + 287
frame #4: 0x00000001125ed782 UIKit`-[UITextInteractionAssistant(UITextInteractionAssistant_Internal)
我发现这两个事件存在一些差异; handleTap 或 handleLongPress 会在不同的场景中触发。所以任何捕获长按事件或禁用系统长按事件的解决方案然后添加我自己的长按事件来处理UITextView中的linkedText上的长事件?