背景:
當你的App中有 WebView 或者有 Text 文本的時候穆碎,毫無疑問,系統(tǒng)默認地會在你進行長按的時候职恳,彈出一個框所禀,來讓你拷貝、粘貼放钦、剪切文本等色徘,亦或是彈出一個放大鏡。
而當你進行開發(fā)的時候操禀,往往很明確的知道自己的 WebView 希望展示的是什么東西褂策,這個時候,你可能會希望自定義長按手勢(LongPressGesture)的功能床蜘,而不是任由系統(tǒng)“智能”地幫助你辙培。
然而當你做了一系列工作自定義了長按手勢之后,卻發(fā)現(xiàn)它的優(yōu)先級是低于系統(tǒng)默認的彈出框的邢锯。
在 StackOverFlow 上面查找一番之后扬蕊,發(fā)現(xiàn)一個可能對某些人有效的方法是:
webView.stringByEvaluatingJavaScriptFromString("document.documentElement.style.webkitUserSelect='none';")
webView.stringByEvaluatingJavaScriptFromString("document.documentElement.style.webkitTouchCallout='none';")
將這兩行代碼加入到 webViewShouldLoadWithRequest 方法中,可以通過 JS 來修改網(wǎng)頁丹擎。
【重點】
然而這并不是對所有情況都有效尾抑,甚至今天在 Xcode 7 GM + iOS 9 環(huán)境下,徹底失效了蒂培。糾結(jié)很久之后再愈,發(fā)現(xiàn)
長按手勢的默認屬性中,有一個 minimumPressDuration 默認值是 0.5护戳,也就是說翎冲,在長按了0.5秒時,我們自定義的長按手勢執(zhí)行方法和系統(tǒng)的沖突了媳荒,于是解決方法顯而易見:把自定義長按手勢的反應時間縮短到0.5s以內(nèi)抗悍,這樣就可以在系統(tǒng)方法執(zhí)行之前完成操作驹饺,而事實上,你甚至可以簡單粗暴地把它改為0.1s缴渊,依然不會和點按的 Tap 手勢有沖突赏壹。
self.longPressPan.minimumPressDuration = 0.3
希望對大家有所幫助 :)
更新:在 StoryBoard 中拖動手勢控件到 ViewController 的時候,不要拖動到 ViewController 的頂端衔沼,而要拖動到 ViewController 的 View 的部分蝌借,讓它自動設置好手勢的控制區(qū)域,否則無論怎么設置指蚁,手勢都不會起作用菩佑。