【iOS開發】禁用WebView放大鏡及拷貝貼上彈出框
背景:
當你的App中有 WebView 或者有 Text 文字的時候,毫無疑問,系統預設地會在你進行長按的時候,彈出一個框,來讓你拷貝、貼上、剪下文字等,亦或是彈出一個放大鏡。
而當你進行開發的時候,往往很明確的知道自己的 WebView 希望展示的是什麼東西,這個時候,你可能會希望自定義長按手勢(LongPressGesture)的功能,而不是任由系統“智慧”地幫助你。
然而當你做了一系列工作自定義了長按手勢之後,卻發現它的優先順序是低於系統預設的彈出框的。
在 StackOverFlow 上面查詢一番之後,發現一個可能對某些人有效的方法是:
webView.stringByEvaluatingJavaScriptFromString("document.documentElement.style.webkitUserSelect=`none`;")
webView.stringByEvaluatingJavaScriptFromString("document.documentElement.style.webkitTouchCallout=`none`;")
將這兩行程式碼加入到 webViewShouldLoadWithRequest 方法中,可以通過 JS 來修改網頁。
【重點】
然而這並不是對所有情況都有效,甚至今天在 Xcode 7 GM + iOS 9 環境下,徹底失效了。糾結很久之後,發現
長按手勢的預設屬性中,有一個 minimumPressDuration 預設值是 0.5,也就是說,在長按了0.5秒時,我們自定義的長按手勢執行方法和系統的衝突了,於是解決方法顯而易見:把自定義長按手勢的反應時間縮短到0.5s以內,這樣就可以在系統方法執行之前完成操作,而事實上,你甚至可以簡單粗暴地把它改為0.1s,依然不會和點按的 Tap 手勢有衝突。
self.longPressPan.minimumPressDuration = 0.3
希望對大家有所幫助 :)
更新:在 StoryBoard 中拖動手勢控制元件到 ViewController 的時候,不要拖動到 ViewController 的頂端,而要拖動到 ViewController 的 View 的部分,讓它自動設定好手勢的控制區域,否則無論怎麼設定,手勢都不會起作用。
相關文章
- iOS開發-深拷貝&淺拷貝iOS
- iOS深拷貝和淺拷貝iOS
- 使用UltraEdit來拷貝貼上二進位制
- JS 文字輸入框放大鏡效果JS
- 重新敲一遍程式碼,勝過拷貝貼上
- 【轉載】使用UltraEdit來拷貝貼上二進位制
- 【iOS 開發】iOS 無彈框更換 app 圖示iOSAPP
- 深入淺出深拷貝與淺拷貝
- 淺拷貝和深拷貝 iOS 的copy 以及 mutablecopyiOS
- 深入淺出的“深拷貝與淺拷貝”
- IOS學習之淺析深拷貝與淺拷貝iOS
- 移動端禁止彈出儲存影像或者拷貝影像
- iOS開發之WebViewiOSWebView
- Linux 下拷貝目錄及打包壓縮拷貝Linux
- ios 深淺拷貝學習iOS
- iOS深淺拷貝小結iOS
- CSS滑鼠放在連結上出現彈出框CSS
- 瞭解一下js物件深拷貝與淺拷貝(前端開發面試)JS物件前端面試
- vue深拷貝淺拷貝Vue
- 仿IOS底部彈框iOS
- python 指標拷貝,淺拷貝和深拷貝Python指標
- iOS - 拷貝resource資原始檔夾iOS
- iOS 圖文並茂的帶你瞭解深拷貝與淺拷貝iOS
- 一文搞懂Java引用拷貝、淺拷貝、深拷貝Java
- jquery之物件拷貝深拷貝淺拷貝案例講解jQuery物件
- C++拷貝建構函式(深拷貝,淺拷貝)C++函式
- JS深拷貝與淺拷貝JS
- Java深拷貝和淺拷貝Java
- 物件深拷貝和淺拷貝物件
- javascript 淺拷貝VS深拷貝JavaScript
- JavaScript 深度拷貝和淺拷貝JavaScript
- JavaScript深拷貝和淺拷貝JavaScript
- js 淺拷貝和深拷貝JS
- js 深拷貝和淺拷貝JS
- JavaScript淺拷貝和深拷貝JavaScript
- js深拷貝和淺拷貝JS
- js 深拷貝 vs 淺拷貝JS
- jQuery放大鏡jQuery