zoukankan      html  css  js  c++  java
  • 禁用 WebView 放大镜及拷贝粘贴弹出框

    文/KyXu(简书作者)
    原文链接:http://www.jianshu.com/p/40048d9c979a
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

    背景:
    当你的App中有 WebView 或者有 Text 文本的时候,毫无疑问,系统默认地会在你进行长按的时候,弹出一个框,来让你拷贝、粘贴、剪切文本等,亦或是弹出一个放大镜。
    而当你进行开发的时候,往往很明确的知道自己的 WebView 希望展示的是什么东西,这个时候,你可能会希望自定义长按手势(LongPressGesture)的功能,而不是任由系统“智能”地帮助你。
    然而当你做了一系列工作自定义了长按手势之后,却发现它的优先级是低于系统默认的弹出框的。

    在 StackOverFlow 上面查找一番之后,发现一个可能对某些人有效的方法是:

    webView.stringByEvaluatingJavaScriptFromString("document.documentElement.style.webkitUserSelect='none';")
    webView.stringByEvaluatingJavaScriptFromString("document.documentElement.style.webkitTouchCallout='none';")

    将这两行代码加入到 webViewShouldLoadWithRequest 方法中,可以通过CSS来修改网页。

    【重点】

    然而这并不是对所有情况都有效,甚至今天在 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 的部分,让它自动设置好手势的控制区域,否则无论怎么设置,手势都不会起作用。

    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:nil];

        longPress.delegate = self;

        longPress.minimumPressDuration = 0.3;  //这里为什么要设置0.3,因为只要大于0.5就无效,我像大概是因为默认的跳出放大镜的手势的长按时间是0.5秒,

        //如果我们自定义的手势大于或小于0.5秒的话就来不及替换他的默认手势了,这是只是我的猜测。但是最好大于0.2

        //秒,因为有的pdf有一些书签跳转功能,这个值太小的话可能会使这些功能失效。

        [self.webView addGestureRecognizer:longPress];

      

    #pragma mark - UIGestureRecognizerDelegate

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

    {

        return NO;  //这里一定要return NO,至于为什么大家去看看这个方法的文档吧。

        //还有就是这个委托在你长按的时候会被多次调用,大家可以用nslog输出gestureRecognizer和otherGestureRecognizer

        //看看都是些什么东西。

    }

  • 相关阅读:
    Oracle数据中的Regexp_*的大概用法(正则表达式)REGEXP_LIKE、REGEXP_INSTR 、REGEXP_SUBSTR 、REGEXP_REPLACE
    Oracle 基本权限授权或者回收权限、解锁等权限配置
    linux导入导出数据库方法 windows导入导出数据库方法
    新安装 wampserver 出现 You don't have permission to access / on this server. 或者访问数据库出现You don't have permission to access /phpmyadmin/ on this server.(解决方法)转
    非常的奇葩,终于解决了硬盘从盘盘符消失的问题 http://bbs.gamersky.com/thread-1712710-1-1.html (出处: 游民星空论坛)
    Oracle 检验身份证是否正确的存储过程
    PHP语言、浏览器、操作系统、IP、地理位置、ISP
    解决weblogic与系统时间相差8小时的问题
    nagios中监测dns 227.7.128.68的网络状态
    【转】新手该如何学python怎么学好python?
  • 原文地址:https://www.cnblogs.com/jyking/p/5311682.html
Copyright © 2011-2022 走看看