在UITableViewCell中嵌入的UIWebView中触摸与滚动

时间:2013-04-24 01:26:35

标签: ios uitableview uiwebview uiscrollview

我在UITableViewCell中嵌入了一个UIWebView。

webview内容属静态大小,并且.scrollView.scrollEnabled = NO

webview中的javascript会响应touchend个事件。

除了用户在表格视图中滚动时触发touchend事件,一切正常。

我尝试在表格视图上设置canCancelContentTouches但没有成功。

有没有办法在滚动时停止javascript事件触发,或者在javascript中检测到这个?

2 个答案:

答案 0 :(得分:0)

您将要使用UIScrollViewDelegate,它具有以下方法:

– scrollViewDidScroll:
– scrollViewWillBeginDragging:
– scrollViewWillEndDragging:withVelocity:targetContentOffset:
– scrollViewDidEndDragging:willDecelerate:
– scrollViewShouldScrollToTop:
– scrollViewDidScrollToTop:
– scrollViewWillBeginDecelerating:
– scrollViewDidEndDecelerating:

将UITableViewController委托的“scrollView.delegate”属性设置为“self”,并在将UIScrollViewDelegate添加到表视图控制器后执行以下操作(您可能根本不需要这样做,我不记得但它可能自动完成,你只需暴露这些方法。)

– scrollViewWillBeginDragging:

-> take your webview and "yourWebview setUserInteractionEnabled:NO"

– scrollViewWillEndDragging:withVelocity:targetContentOffset:

-> take your webview and "yourWebview setUserInteractionEnabled:YES"

这只是一种方法。另一个可能是利用UIGestureRecognizerDelegate并尝试使用“ - gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:”

答案 1 :(得分:0)

我找到的解决方案是在javascript中设置一个标志,以指示应忽略touchend事件。如果设置了标志,则touchend处理程序将失效。

该标记在scrollViewWillBeginDragging:中设置,并在scrollViewWillEndDragging:withVelocity:targetContentOffset:

中清除

设置和清除标志就像[self.webView stringByEvaluatingJavaScriptFromString:@"ignoreTouchEvents = false;"]

一样简单