2016-05-12 57 views
2

在我的項目中,有一個關於UITextView的需求。當我點擊UITextView中的鏈接時,我們的應用程序應該打開一個webview控制器來顯示鏈接的內容;當我長按UITextView中的鏈接,我們的應用程序應該表現出約拷貝一些菜單和paste.now我可以實現UIInputViewDelegate我如何捕獲textView鏈接的長按事件

(BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange 

第二種情況雖然shouldInteractWithURL被激發,我不能識別相對標籤在輕拍事件和長按事件之間。

然後我斷點的

(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) 

我發現兩個事件有一些區別; handleTaphandleLongPress在不同的場景被觸發。所以任何解決方案來捕獲長按事件或禁用系統的長按事件,然後添加我自己的長按事件來處理UITextView中的linkedText上的長事件?

+0

的可能的複製[如何攔截上的UITextView長按沒有禁用上下文菜單?(http://stackoverflow.com/questions/9788535/how-to-intercept-long-press-on-uitextview-without-disabling-context-menu) – Larme

+0

是的,這個工具顯然可以中斷長按事件。但我怎樣才能與點擊事件交互?最後,我自己檢測超鏈接,併爲UITextView添加longGestureRecognizer,TapGestureRecognizer。當某些gestureRecognizer發生時,我得到了tap位置,找到了tap位置的屬性,然後獲取了超鏈接文本範圍並執行了我想要的操作 –

回答

0

爲什麼去一個做長按如果超級鏈接它應該工作在這裏只是一個檢查https://stackoverflow.com/a/37207783/5772601

+0

yes,it是一種需求。長按可以對話一個包含複製項目的菜單,然後點擊跳轉到一個webview控制器 –

相關問題