Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIWebView cannot click link

I am pretty sure that I understand how to catch a click on a UIWebView using the webView:shouldStartLoadWithRequest:navigationType: method, but my webView does not even allow me to click the link. I am using:

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(12, top, boundsSize.width - 40.0, 400.0f)];
webView.delegate = self;
webView.backgroundColor = [UIColor clearColor];
webView.opaque = NO;
webView.allowsInlineMediaPlayback = YES;
webView.dataDetectorTypes = UIDataDetectorTypeAll;
// add to subview

I am loading in an HTML string rather than loading a URL:

[webView loadHTMLString:bodyHTML baseURL:nil];

Delegate method:

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

    NSLog(@"Loaded");

    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        NSURL *url = request.URL;
        NSString *urlString = url.absoluteString;
        NSLog(urlString);
    }

    return YES;

}//end

Everytime my webview loads I DO get the "Loaded" in my logs, so I know that the delegate method is getting called. But I can never click on a link within my UIWebView and have anything happen. It does not even look like it is allowing a pressed state on the link. The link is highlighted like a link, just won't allow clicking.

Ideas?

like image 817
Nic Hubbard Avatar asked Jun 08 '11 18:06

Nic Hubbard


1 Answers

The reason for the UIWebView not responding to touch events is most probably this line:

webView.opaque = NO;

Try setting opaque to YES.

My understanding is that for a view to respond to touch events, that view has to be returned by the call to hitTest:withEvent: during the view hierarchy traversal performed by the event delivery mechanism.

From the hitTest:withEvent: documentation:

This method ignores view objects that are hidden, that have disabled user interaction, or have an alpha level less than 0.01.

Update

Based on new info: if the UIWebView is embedded in a UIScrollView, quote from the Apple docs:

Important: You should not embed UIWebView or UITableView objects in UIScrollView objects. If you do so, unexpected behavior can result because touch events for the two objects can be mixed up and wrongly handled.

like image 170
octy Avatar answered Oct 11 '22 10:10

octy