解决 TableView 上的控件 UISlider 的手势冲突

1,524 阅读1分钟

TableView 上有 UITableViewCell,

如果 UITableViewCell 的 contentView 上面有 UISlider,

控件 UISlide 会与 UITableVIew 自带的滚屏手势冲突。

UITableVIew 继承自 UIScrollView , UIScrollView 自带三个手势

// 滚动

open var panGestureRecognizer: UIPanGestureRecognizer { get }

// 缩放

open var pinchGestureRecognizer: UIPinchGestureRecognizer? { get }

open var directionalPressGestureRecognizer: UIGestureRecognizer { get }

一般,UISlider 的拖动手势,会与 UITableVIew 的 panGestureRecognizer 冲突。

表现就是,Cell 上的 UISlider 滑块不太好拉动。拉滑块,相对容易带着 UITableView 上下晃动。

解决:

使用了表视图的继承,在子类中处理了手势代理


class CustomTB: UITableView {}



extension CustomTB: UIGestureRecognizerDelegate{
    
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
        if touch.view is UISlider{
            return false
        }
        else{
            return true
        }
    }
}

github 链接