首页 > 解决方案 > Swift TableView 与 UIPanGestureRecognizer 冲突

问题描述

我检查了所有解决方案,但没有找到适合我的案例。我有带有单元格的tableView。某些单元格还具有带有标题部分和单元格的TableView 。我曾经将 UIPanGestureRecognizer 添加到 headerSerction 以添加幻灯片视图(删除单元格/等)。由于某些原因,我无法再添加一行来实现基本方法。现在的问题是,当我滚动主 TableView 时,优先级设置为在单元格内滑动水平视图(内部 tableView 部分包含 UIPanGestureRecognizer)。我该如何解决?

标题部分包含:

func setupGesture(){
    let gesture = UIPanGestureRecognizer(target: self, action: #selector(wasDragged(_:)))
    gesture.cancelsTouchesInView = false
    contentsView.addGestureRecognizer(gesture)
    contentsView.isUserInteractionEnabled = true
    gesture.delegate = self
}

另外,拖动动作:

@objc
func wasDragged(_ gestureRecognizer: UIPanGestureRecognizer) {
    if gestureRecognizer.state == UIGestureRecognizerState.began || gestureRecognizer.state == UIGestureRecognizerState.changed {
        let translation = gestureRecognizer.translation(in: self.contentsView)
        print(gestureRecognizer.view!.frame.minX)
        if(gestureRecognizer.view!.frame.minX < 80) || (gestureRecognizer.view!.frame.minX > -160){
            gestureRecognizer.view!.center = CGPoint(x: gestureRecognizer.view!.center.x + translation.x, y: gestureRecognizer.view!.center.y)
        }else {
            gestureRecognizer.view!.center = CGPoint(x: 160, y: 0)
        }

        gestureRecognizer.setTranslation(CGPoint(x: 0, y: 0), in: self.contentsView)
    }else{

        if(gestureRecognizer.view!.frame.minX <= 40) && (gestureRecognizer.view!.frame.minX >= 0){
            UIView.animate(withDuration: 0.3, delay: 0.0, options: [.allowUserInteraction], animations: {
                gestureRecognizer.view!.center = CGPoint(x: (self.contentsView.frame.width / 2), y: gestureRecognizer.view!.center.y)
            })
        }else if(gestureRecognizer.view!.frame.minX >= 40) && (gestureRecognizer.view!.frame.minX >= 0){
            UIView.animate(withDuration: 0.3, delay: 0.0, options: [.allowUserInteraction], animations: {
                gestureRecognizer.view!.center = CGPoint(x: (self.contentsView.frame.width / 2) + 80, y: gestureRecognizer.view!.center.y)
            })
        }else if(gestureRecognizer.view!.frame.minX >= -40) && (gestureRecognizer.view!.frame.minX <= 0){
            UIView.animate(withDuration: 0.3, delay: 0.0, options: [.allowUserInteraction], animations: {
                gestureRecognizer.view!.center = CGPoint(x: (self.contentsView.frame.width / 2), y: gestureRecognizer.view!.center.y)
            })
        }else if(gestureRecognizer.view!.frame.minX <= -40) && (gestureRecognizer.view!.frame.minX >= -80){
            UIView.animate(withDuration: 0.3, delay: 0.0, options: [.allowUserInteraction], animations: {
                gestureRecognizer.view!.center = CGPoint(x: (self.contentsView.frame.width / 2) - 80, y: gestureRecognizer.view!.center.y)
            })
        }else if(gestureRecognizer.view!.frame.minX <= -80) && (gestureRecognizer.view!.frame.minX >= -120){
            UIView.animate(withDuration: 0.3, delay: 0.0, options: [.allowUserInteraction], animations: {
                gestureRecognizer.view!.center = CGPoint(x: (self.contentsView.frame.width / 2) - 80, y: gestureRecognizer.view!.center.y)
            })
        }else if(gestureRecognizer.view!.frame.minX <= -120) && (gestureRecognizer.view!.frame.minX <= 0){
            UIView.animate(withDuration: 0.3, delay: 0.0, options: [.allowUserInteraction], animations: {
                gestureRecognizer.view!.center = CGPoint(x: (self.contentsView.frame.width / 2) - 160, y: gestureRecognizer.view!.center.y)
            })
        }
    }
}

标签: iosswiftuitableviewtouchuipangesturerecognizer

解决方案


推荐阅读