UIWebView не может нажать на ссылку - PullRequest
6 голосов
/ 08 июня 2011

Я почти уверен, что понимаю, как поймать щелчок на UIWebView с помощью метода webView: shouldStartLoadWithRequest: navigationType: метод, но мой webView даже не позволяет мне щелкнуть ссылку.Я использую:

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

Я загружаю в строку HTML, а не загружаю URL:

[webView loadHTMLString:bodyHTML baseURL:nil];

Метод делегирования:

- (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

Каждый раз, когда я смотрю веб-страницузагружает, я действительно получаю «Loaded» в моих журналах, поэтому я знаю, что вызывается метод делегата.Но я никогда не могу нажать на ссылку в моем UIWebView, и у меня ничего не происходит.Это даже не похоже на то, что разрешает нажатие на ссылку.Ссылка подсвечивается как ссылка, просто не позволяет нажимать.

Идеи?

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Причиной того, что UIWebView не отвечает на сенсорные события, является, скорее всего, эта строка:

webView.opaque = NO;

Попробуйте установить непрозрачный YES.

Насколько я понимаю, для представления, отвечающего на события касания, это представление должно быть возвращено вызовом hitTest:withEvent: во время обхода иерархии представления, выполняемого механизмом доставки события.

Из hitTest:withEvent: документации :

Этот метод игнорирует скрытые объекты просмотра, которые отключили взаимодействие с пользователем или имеют альфа-уровень менее 0,01.

Обновление

На основе новой информации: если UIWebView встроен в UIScrollView, цитата из Apple docs :

Внимание! Не следует встраивать объекты UIWebView или UITableView в объекты UIScrollView. В этом случае может возникнуть непредвиденное поведение, поскольку события касания для двух объектов могут быть смешаны и неправильно обработаны.

0 голосов
/ 26 марта 2018

Пожалуйста, попробуйте следующий код

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if(navigationType==UIWebViewNavigationTypeLinkClicked)
    {
        [[UIApplication sharedApplication]openURL:request.URL];
        return NO;
    }
    return YES;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...