【问题标题】:panGestureRecognizer and Table SwipepanGestureRecognizer 和表格滑动
【发布时间】:2025-12-25 02:35:12
【问题描述】:

我在 Swift 中有一个 UITableViewController。这有一个大表,具有根据需要滑动和删除行的功能。当它单独运行时,它可以正常工作。

我还有一个带有SWRevealViewController 框架的侧边栏功能。一旦我将所需的panGestureRecognizer 添加到控制器,表格滑动就不再起作用了。

我认为这是一个冲突,但我不确定如何解决它,因为表格滑动并没有真正以任何方式命名。希望你能帮忙?

编辑

当前代码:

func gestureRecognizer(UIGestureRecognizer,
        shouldRecognizeSimultaneouslyWithGestureRecognizer:UIGestureRecognizer)
-> Bool {
            return true
    }

    func gestureRecognizer(UIGestureRecognizer,
        shouldBeRequiredToFailByGestureRecognizer:UIGestureRecognizer) -> Bool {
            return true
    }

    override func viewDidAppear(animated: Bool) {



        // Create sidebar button
        sidebutton.addTarget(self.revealViewController(), action:"revealToggle:", forControlEvents:UIControlEvents.TouchUpInside)

        // Add gestures for sidebar functionality
        self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer());

    }

// Handle deleting via row
    func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) {


        // If they want to delete
        if editingStyle == UITableViewCellEditingStyle.Delete {

            //Delete method

            // Any errors? - KILL IT
            var error: NSError? = nil
            if !context.save(&error) {
                abort()
            }

        }

    }

【问题讨论】:

    标签: swift uipangesturerecognizer swrevealviewcontroller


    【解决方案1】:

    panGestureRecognizer 的委托设置为您的视图控制器并在您的视图控制器中实现-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

    返回YES 应该允许两者同时触发。

    如果没有,那么您可能需要查看委托方法 -gestureRecognizer:shouldRequireFailureOfGestureRecognizer:-gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer: 以获得更细粒度的控制。


    看了SWRevealViewController,好像有自己的委托方法。

    -revealController:panGestureRecognizerShouldRecognizeSimultaneouslyWithGestureRecognizer: 将被使用而不是 -gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

    【讨论】:

    • 嗨,Jeffery,我已经添加了我目前在上面的代码来演示这个问题。你说的两个功能我都试过了,不知道实现是否正确。他们似乎没有按原样工作?我还应该补充一点,即使没有这个,它们都会开火,但我必须非常努力地击中确切的位置才能显示删除按钮,而在我的手机上这几乎是不可能的。谢谢!
    • 谢谢杰弗里。我将如何用 Swift 编写这个?遇到一些麻烦我认为这是不正确的override func revealController(UIGestureRecognizer, panGestureRecognizerShouldRecognizeSimultaneouslyWithGestureRecognizer:UIGestureRecognizer) -> Bool { return true }
    • 它不是一个覆盖,因为它是一个委托。选择器 - (BOOL)revealController:(SWRevealViewController *)revealController panGestureRecognizerShouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer; 变为 func revealController(revealController: SWRevealViewController, panGestureRecognizerShouldRecognizeSimultaneouslyWithGestureRecognizer gestureRecognizer:UIGesture‌​Recognizer) -> Bool
    • 就实现而言,您需要确定哪些手势应该协同工作。