Как поместить фокус из UIWebView на другой UIView во время долгого нажатия - PullRequest
1 голос
/ 06 февраля 2011

Я использую javascript для обнаружения длительного нажатия ( событие прикосновения, тогда редкие события прикосновения через 300 мс будут оцениваться как длительное нажатие, не требующее прикосновения ), затем использую javascript

document.location = "XXXXXXX";

чтобы отправить уведомление в верхнюю часть UIView.I гарантирую, что в коде js проблем нет.

Проблема возникает здесь: Тогда в делегате я написал

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
/*
blablabla
*/
//show Contextual Menu
[webView resignFirstResponder];
CGRect  viewRect = CGRectMake(0, 0, 320, 460);
ContextualMenu *menu = [[ContextualMenu alloc] initWithFrame:viewRect];
[menu becomeFirstResponder];
/*
blablabla
*/
return NO;}

Некоторая часть представления меню ContextualMenu * наполовину прозрачна, поэтому я вижу:

Когда я запускаю долгое нажатие в UIWebView и окно ContextualMenu выходит и закрывает UIWebView, мой палец все еще может прокручивать UIWebView (пока я не уберу палец с экрана)

Можно ли как-то остановить это поведение и переместить фокус из UIWebView в представление ContextualMenu , когда появляется ContextualMenu? (Игнорирование продолжающегося длинного нажатия)

UPDATE:

Я добавил этот код до и после того, как JS отправил уведомление в верхний UIView, но по-прежнему бесполезно. (Также пытался вызвать событие touchcancel триггера)

$(event.target).trigger('touchend');
$(event.currentTarget).trigger('touchend');

Ответы [ 3 ]

0 голосов
/ 06 февраля 2011

Вы пробовали это?

var el = ...
el.addEventListener('touchstart', function(e){
  ...
  ...
  **e.preventDefault();**
}, false);

Удачи!

0 голосов
/ 14 февраля 2011

Наконец я сделал это сложным способом. Я подклассифицировал UIWindow и перегрузил sendEvent: метод, в соответствии с этой статьей http://atastypixel.com/blog/a-trick-for-capturing-all-touch-input-for-the-duration-of-a-touch/. Кроме того, мне пришлось внести небольшую модификацию в этот код: перечислить массив представлений для выбора правильного представления при отправке события touchMoved. Тем временем я заменил код javascript на UILongPressGestureRecognizer, добавленный в UIWebView, поэтому он выглядел лучше.

0 голосов
/ 06 февраля 2011

Вы пытались установить для параметра userInteractionEnabled UIWebView значение False?

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