UITableView 单手势行滑动动作

Posted

技术标签:

【中文标题】UITableView 单手势行滑动动作【英文标题】:UITableView single-gesture row swipe actions 【发布时间】:2016-09-01 15:25:56 【问题描述】:

我正在尝试在我的 UITableView 中实现单手势滑动操作,您可以在其中滑动以显示操作按钮,然后继续一直滑动以激活默认操作(例如“删除”或“标记为已读”在邮件中)。

我正在我的代表中实施-tableView:editActionsForRowAtIndexPath:。我的按钮出现了,当我点击它时它会工作,但它不会被完全滑动激活。

我已经在我的数据源中尝试过使用和不使用-tableView:commitEditingStyle:forRowAtIndexPath:-tableView:canEditRowAtIndexPath:。只有后者被调用,但似乎两者都没有区别。

我还需要做些什么吗?还是使用标准 API 实际上无法实现这种行为?

【问题讨论】:

【参考方案1】:

我会检查你的手势识别器的目标函数中滑动是否超过了某个阈值。

试试这个

func swipeRight(sender: UIGestureRecognizer)
    let threshold : CGFloat = 100;
    var startLocation = CGPoint()
    if (sender.state == UIGestureRecognizerState.Began)
        startLocation = sender.locationInView(self.view)
    else if (sender.state == UIGestureRecognizerState.Ended)
        let stopLocation = sender.locationInView(self.view)
        let distanceX = stopLocation.x - startLocation.x
        let distanceY = stopLocation.y - startLocation.y
        let distance = sqrt(distanceX*distanceX + distanceY*distanceY )
        if (distance > threshold )
            //Delete or Edit Row Here
        
    

【讨论】:

如果我正在为滑动按钮进行自定义实现。实际上,我正在这样做(基于 MGSwipeTableCell),但我试图看看是否可以用标准 API 替换该方法并摆脱大量代码。使用editActionsForRowAtIndexPath,操作系统完全负责手势识别器。

以上是关于UITableView 单手势行滑动动作的主要内容,如果未能解决你的问题,请参考以下文章

将垂直滚动手势传递给下面的 UITableView

向 UITableView 添加滑动手势

UITableView 中的 UISlider 没有响应滑动手势

如何禁用 UITableView 上的左右滑动手势

具有屏幕边缘滑动手势的水平 uitableview

滑动垂直手势无法使用UITableView