Захват касаний в UIWebView

Возникли проблемы с захватом событий касания в UIWebView. Хотите иметь возможность улавливать прикосновения к словам при прокрутке HTML-страницы с целью вставки гиперссылок в HTML [который я полностью контролирую] в момент касания. Очевидно, какой-то существующий агент уже чувствует прикосновения, потому что я получаю всплывающее окно «Копировать или определить» с увеличительным стеклом.

Мне удалось захватить события касания в другом настраиваемом UIViewController в моем приложении, у которого нет UIWebView, разместив:

self.view.userInteractionEnabled = YES;
self.view.multipleTouchEnabled = YES;

в viewDidLoad и разместив

- (BOOL) canBecomeFirstResponder
{
 NSLog(@"canBecomeFirstResponder");
 return YES;
}

в реализации. Затем "touchesBegan" вызывается всякий раз, когда я касаюсь любого места в контроллере представления.

Но тот же код не действует в настраиваемом контроллере представления, где большая часть экрана покрыта UIWebView. Любопытно, что касания в маленьком UIToolBar внизу действительно вызывают «касания начались», но что-то в UIWebView опережает мой «touchesBegan».

Есть ли способ фиксировать эти события, не отключая все, что хочет UIWebView? Я бы не хотел потерять прокрутку и другие функции.

Спасибо. И с Новым годом.


person Frank Natoli    schedule 02.01.2012    source источник


Ответы (1)


Улавливание прикосновений к UIWebView - это ящик боли Пандоры. Поскольку вам нужны только касания, возможно, проще всего разместить UIView с [UIColor clearColor] в качестве цвета фона поверх веб-представления. В этом представлении переопределите hitTest: (вместо переопределения touchesBegan: и т. Д.) И используйте его для определения местоположения крана. hitTest: возвращает UIView, поэтому, если вы хотите, чтобы веб-представление реагировало на касание, просто верните веб-представление из вашего hitTest: переопределения; в противном случае верните представление наложения, которое затем получит все touches... методы.

person MusiGenesis    schedule 02.01.2012
comment
Я видел аналогичный совет [хотя отстаивал UIButton, а не UIView] и проигнорировал его, потому что оказалось относительно безболезненным прикоснуться к обычному представлению. Но я воспользуюсь вашим советом по поводу проблем с UIWebView и попробую UIView. Спасибо. - person Frank Natoli; 02.01.2012