加载中…
正文 字体大小:

iOS9-屏蔽UIWebView长按复制事件

(2015-10-14 16:03:40)
标签:

ios9

长按复制

禁止

屏蔽

分类: iOS开发
今天公司的iOS项目需要用UIWebView去加载本地html,加载完之后,当你长按webView时,会出现复制或者放大镜事件,为了用户体验需要屏蔽此事件。

在网上找了一大堆,有两种解决方案:
方案一:在html的css文件中加入以下代码:

*{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);}

body{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}


方案二:在webView的delegate方法webViewDidFinishLoad中加入以下代码

[webView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitUserSelect='none';"];

 

    [webView stringByEvaluatingJavaScriptFromString:@"document.body.style.webkitTouchCallout='none';"];


当你在ios8之前的系统中运行时,这两种方案,会完美解决问题,但是在iOS9中长按时,还是会弹出复制的提示框,为此又去网上找了以下代码:


1、在viewdidload或适当的地方创建一个自定义的长按手势


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

    longPress.delegate = self; //记得在.h文件里加上委托

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

    //如果我们自定义的手势大于或小于0.5秒的话就来不及替换他的默认手势了,这是只是我的猜测。但是最好大于0.2秒,因为有的pdf有一些书签跳转功能,这个值太小的话可能会使这些功能失效。

 

    [self.webView addGestureRecognizer:longPress];


2、接下来就是实现一个委托了


#pragma mark - GestureRecognizerDelegate


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

{

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

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

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

 

}


感觉这种方法只是解决了问题,但不是很完美,如果你有好的方法,欢迎分享。


以上代码来自网上某位无私的开发者,在此声明,感谢。

0

阅读 评论 收藏 转载 喜欢 打印举报
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有