使UIWebView响应touch事件

UIWebView是不响应touch事件的,这点让人很头疼。但是可以使用js解决这个问题,话不多说,代码如下:

在load的HTML里添加:

NSString *touchString = @"<script language=\"javascript\">document.ontouchstart=function(){document.location=\"myweb:touch:start\";};document.ontouchend=function(){document.location=\"myweb:touch:end\";}; document.ontouchmove=function(){document.location=\"myweb:touch:move\";} </script>";
然后在webview的delegate方法里截取resquest就行了:
#define Delaytime 0.3f;
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *requestString = [[request URL] absoluteString];
NSArray *components = [requestString componentsSeparatedByString:@":"];
if ([components count] > 1 && [(NSString *)[components objectAtIndex:0]
isEqualToString:@"myweb"]) {
if([(NSString *)[components objectAtIndex:1] isEqualToString:@"touch"])
{
//NSLog(@"you are touching!");
NSTimeInterval delaytime = Delaytime;
if ([(NSString *)[components objectAtIndex:2] isEqualToString:@"start"])
{
/*
@需延时判断是否响应页面内的js...
*/
NSLog(@"touch start!");
[self performSelector:@selector(singleTap) withObject:nil afterDelay:delaytime];
}
else if ([(NSString *)[components objectAtIndex:2] isEqualToString:@"move"])
{
//**如果touch动作是滑动,则取消singleTap动作**//
NSLog(@"you are move");
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTap) object:nil];
}
else if ([(NSString *)[components objectAtIndex:2] isEqualToString:@"end"])
{
NSLog(@"touch end!");
}
}
return NO;
}
return YES;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值