Вычисление, если ссылка нажата в веб-представлении - iPhone - PullRequest
3 голосов
/ 14 марта 2010

Я использую настраиваемое веб-представление для отображения панели вкладок, когда пользователь касается веб-вида. Но когда я нажал на ссылку в веб-просмотре, панель вкладок показывается некоторое время, а затем страница загружается. Я использую это пользовательское веб-представление для обнаружения прикосновения: http://github.com/psychs/iphone-samples/blob/b772b963f2acf18d478b41b44555992fcd8d4f31/WebViewTappingHack/Classes/PSWebView.m

Могу ли я определить, нажата ли ссылка или нет? Поскольку ссылка отображается в веб-просмотре, веб-просмотр обнаруживает прикосновение, а также загружает страницу ... Я хочу предотвратить это.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 24 ноября 2014

UIWebViewNavigationTypeLinkClicked = Сообщает, когда нажата ссылка. Только проверьте, что вы звоните

self.webView.delegate = self;

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        [[UIApplication sharedApplication] openURL:request.URL];
        return NO;
    }
    return YES;
}
3 голосов
/ 15 марта 2010

Использование Javascript

Вместо того, чтобы предотвращать загрузку страницы, я вставлял бы Javascript в веб-просмотр, чтобы касание ссылки ничего не делало.

Я ответил на вопрос, подобный этому, не так давно. Вместо отключения всех ссылок (как и в случае с другим вопросом) просто найдите конкретную ссылку, которую вы хотите отключить, и удалите атрибут href .

Использование делегата UIWebview

В качестве альтернативы, если вы хотите иметь возможность отвечать пользователю, пытающемуся щелкнуть ссылку (возможно, чтобы дать ему сообщение), вы можете установить делегат UIWebview и реализовать метод webView:shouldStartLoadWithRequest:navigationType: и верните NO, если вы пытаетесь загрузить URL, который вы хотите заблокировать.

В качестве отступления обычно рекомендуется использовать белый список, а не черный список для такого рода исключений. Вместо того, чтобы блокировать ссылки, которые вам не нужны, может быть лучше заблокировать все ссылки, , за исключением для тех, на которые вы знаете, безопасно перейти.

0 голосов
/ 15 марта 2010

ОК, я сделал обходной путь и решил сам ...

Мои ссылки находятся вверху и внизу страницы, поэтому я получил координаты экрана по следующему коду, и если pos.y <какое-то значение и pos.y> какое-то значение, то не отображать меню ...

UITouch * touch = [touches anyObject];
CGPoint pos = [touch locationInView: [UIApplication sharedApplication].keyWindow];
NSLog(@"Position of touch: %.3f, %.3f", pos.x, pos.y);

Надеюсь, это кому-нибудь поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...