我使用javascript来检测长按(一个触摸启动事件,然后300毫秒的稀有触摸事件将被视为长按,这不需要一个touchend ),然后使用javascript
document.location = "XXXXXXX";
将通知发送到上层UIView。我保证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的View出现并覆盖UIWebView时,我的手指仍然可以滚动UIWebView (直到我从屏幕上抬起手指)
有没有办法阻止这种行为,并且将焦点从UIWebView移动到ContextualMenu视图,因为ContextualMenu会出现?(忽略正在进行的长按手势)
更新:
我在JS向上层UIView发送通知之前和之后添加了这些代码,但仍然没有用。(也试过触发touchcancel事件)
$(event.target).trigger('touchend');
$(event.currentTarget).trigger('touchend');
答案 0 :(得分:0)
您是否尝试将UIWebView的userInteractionEnabled设置为False?
答案 1 :(得分:0)
你试过这个吗?
var el = ...
el.addEventListener('touchstart', function(e){
...
...
**e.preventDefault();**
}, false);
祝你好运!
答案 2 :(得分:0)
最后我以复杂的方式做到了。我根据本文http://atastypixel.com/blog/a-trick-for-capturing-all-touch-input-for-the-duration-of-a-touch/继承了UIWindow并重载了sendEvent:方法。除此之外,我不得不对该代码进行一些修改:枚举views数组以在调度touchMoved事件时选择正确的视图。 同时,我用添加到UIWebView的UILongPressGestureRecognizer替换了javascript代码,所以看起来更整洁。