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;
}
在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;
}