无法在UIWebView IOS 5中捕获触摸

时间:2012-07-20 07:04:10

标签: iphone ipad uiwebview uitouch uiwindow

我是iPhone开发人员的新手,

TouchCapturingWindow.h

@interface TouchCapturingWindow : UIWindow
{ 
       NSMutableArray *views;

       @private
       UIView *touchView;
}
- (void)addViewForTouchPriority:(UIView*)view;
- (void)removeViewForTouchPriority:(UIView*)view;
@end

TouchCapturingWindow.m

 (void)addViewForTouchPriority:(UIView*)view
 {
    if ( !views ) views = [[NSMutableArray alloc] init];
    [views addObject:view];
}
- (void)removeViewForTouchPriority:(UIView*)view 
{
    if ( !views ) return;
    [views removeObject:view];
}
- (void)sendEvent:(UIEvent *)event 
 {
    UITouch *touch = [[event allTouches] anyObject];
    if (touch.phase == UITouchPhaseBegan) 
    {
        for ( UIView *view in views ) 
        {
            if ( ![view isHidden] && [view pointInside:[touch locationInView:view] withEvent:event] ) 
            {
                touchView = view;
                [touchView touchesBegan:[event allTouches] withEvent:event];
                break;
            }
        }
    }
    else if (touch.phase == UITouchPhaseMoved) 
    {
        if ( touchView ) 
        {
            [touchView touchesMoved:[event allTouches] withEvent:event];
        }
    }
    else if (touch.phase == UITouchPhaseCancelled) 
    {
        if ( touchView ) 
        {
            [touchView touchesCancelled:[event allTouches] withEvent:event];
            touchView = nil;
        }
    }
    else if (touch.phase == UITouchPhaseEnded) 
    {
        if ( touchView ) 
        {
            [touchView touchesEnded:[event allTouches] withEvent:event];
            touchView = nil;
        }
    }
    [super sendEvent:event];
}
@end

DownloadPage.m

- (void)viewDidLoad
{
    [super viewDidLoad];   
    CGRect webFrame = CGRectMake(0.0, 0.0, 500.0, 500.0);
    webView = [[UIWebView alloc] initWithFrame:webFrame];
    [webView setBackgroundColor:[UIColor greenColor]];
    NSString *urlAddress = @"http://stackoverflow.com/";
    NSURL *url = [NSURL URLWithString:urlAddress];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [webView loadRequest:requestObj];
    [self.view addSubview:webView]; 
    NSString *t= [webView stringByEvaluatingJavaScriptFromString:@"window.getSelection().toString()"];
    NSLog(@"selected text=%@",t);
}
- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event 
 {
       NSLog(@"Touches began"); 
 }
- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event      
 {
      NSLog(@"Touches moved"); 
 } 
- (void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event 
 { 
      NSLog(@"Touches ended"); 
 }
- (void) touchesCancelled:(NSSet*)touches withEvent:(UIEvent*)event 
 { 
      NSLog(@"Touches cancelled"); 
 }

我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

这是一个古老的“问题”。

我这样做的方法是添加一个指向你的html按钮或你想要的任何元素的链接。

然后实现这个UIWebView委托方法(不要忘记在你的h文件中添加UIWebViewDelegate)。在webview中按下链接时会调用此方法,以便您可以根据自己的需要使用它:

-(bool) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{

    //Do what ever you want here


    //prevent the web View from loading the link
    return NO;

}

顺便说一句 如果您有要激活的链接,或者您想要实施多个操作,则可以使用NSURL *url = request.URL; 检查URL。