UITableView 嵌套 WKWebView

需求是 UITableView 里面嵌套一个 WKWebView 用于展示 商品详情的图片。图片需要有双指放大效果。于是就涉及到了两个 UIScrollView 的滑动手势冲突问题。

1、刚开始想出的方案是通过设置 scrollEnabled 或者 bounces = NO 来调整 哪个 scrollView 响应事件,在高系统版本上还好,但是在 iOS8上就不行了,一旦 webView 接收到 了滑动事件,不管怎么调整,都不会再响应到 tableView 上了。

2、然后又想通过 设置 UIScrollView 的滑动手势的 delegate,来控制哪个先响应。但是 UIScrollView 的 panGesture 的 delegate 必须设置为 scrollView 自己,于是继承 UITableView,来重载 panGesture 的 delegate 方法。但是继承后 发现这些 方法 虽然 可以调用到,但是调用 super 是个问题。而且继承 WKWebView 里面的 scrollView 也不敢去尝试,害怕WK对它有做不知道的设置。于是此方案也是行不通。

3、最后在翻看 SDK 时,发现 UIView 居然有一个 gesturedelegate 方法:

// called when the recognizer attempts to transition out of UIGestureRecognizerStatePossible if a touch hit-tested to this view will be cancelled as a result of gesture recognition
// returns YES by default. return NO to cause the gesture recognizer to transition to UIGestureRecognizerStateFailed
// subclasses may override to prevent recognition of particular gestures. for example, UISlider prevents swipes parallel to the slider that start in the thumb
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer NS_AVAILABLE_IOS(6_0);

于是就用 swizzle 直接把这个方法弄出来,然后再这里针对两个 scrollView 做出对应的判断就好了。发现效果还可以,能够接收。

哎,原来方法是如此简单。把 UIView 的 常用方法都给忘了。这里记录下,希望以后不要再忘了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 需求是首页TableView中嵌套显示一个H5,我想到的是把WkWebView放到一个cell中显示,并且以H5的...
    土豆Ming阅读 2,916评论 1 1
  • 最近项目中遇到了一个需求,TableView中需要嵌套Web页面,我的解决办法是在系统的UITableViewCe...
    艾福K歪阅读 15,713评论 21 67
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,553评论 1 14
  • 一、简介 <<继承关系:UIScrollView --> UIView-->UIResponder-->NSObj...
    无邪8阅读 1,959评论 0 0
  • 她和他有两个身份。 一个是虚拟的线上身份。一个是真实的线下身份。 在线上,她是本地人,酒店管理专业毕业,白领,有过...
    王樾阅读 281评论 1 2