博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【iOS开发】禁用 WebView 放大镜及拷贝粘贴弹出框
阅读量:6340 次
发布时间:2019-06-22

本文共 1016 字,大约阅读时间需要 3 分钟。

背景:

当你的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 环境下,彻底失效了。纠结很久之后,发现

UILongPressGestureRecognizer.png

长按手势的默认属性中,有一个 minimumPressDuration 默认值是 0.5,也就是说,在长按了0.5秒时,我们自定义的长按手势执行方法和系统的冲突了,于是解决方法显而易见:把自定义长按手势的反应时间缩短到0.5s以内,这样就可以在系统方法执行之前完成操作,而事实上,你甚至可以简单粗暴地把它改为0.1s,依然不会和点按的 Tap 手势有冲突。

self.longPressPan.minimumPressDuration = 0.3

希望对大家有所帮助 :)

更新:在 StoryBoard 中拖动手势控件到 ViewController 的时候,不要拖动到 ViewController 的顶端,而要拖动到 ViewController 的 View 的部分,让它自动设置好手势的控制区域,否则无论怎么设置,手势都不会起作用。

转载地址:http://pmeoa.baihongyu.com/

你可能感兴趣的文章
2、【华为HCIE-Storage】--DAS NAS SAN
查看>>
一个线程池例子
查看>>
configure: error: Cannot find OpenSSL's libraries
查看>>
2.5-搭建本地yum仓库
查看>>
OSPF基础知识
查看>>
zookeeper安装部署
查看>>
RHEL6 preinstall for oracle
查看>>
Corrupt Block
查看>>
centos6——初始化脚本
查看>>
linux I/O优化 磁盘读写参数设置
查看>>
中断处理 I/O内存
查看>>
Java中的transient关键字
查看>>
私有网盘nextcloud 12的问题处理及优化
查看>>
思科设备VLAN之间通信配置
查看>>
mysql排错 (一)
查看>>
CCSP Official (ISC)2 Practice Tests
查看>>
python访问ftp站点,上传文件
查看>>
hql语句中根据时间查询数据
查看>>
20160318作业
查看>>
关于MySQL的几点安全配置
查看>>