如何在左侧水平拖动UITableViewCell?

时间:2015-07-07 01:03:50

标签: ios swift uitableview

我想重新创建我们可以在delete上激活的UITableViewCell函数,但是要将它放在右侧,我希望将它放在左侧(提示我的原因)重新创造它。)

所以我在每个单元格上添加了UIPanGestureRecognizer并实现了这两个委托方法:

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

func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
        let cell = gestureRecognizer.view!
        if gestureRecognizer is UIPanGestureRecognizer {
            let translation = (gestureRecognizer as! UIPanGestureRecognizer).translationInView(cell.superview!)
            if abs(translation.x) > abs(translation.y) {
                return true
            }
        }

        return false
}

然后我实施了处理平底锅的动作:

func rightPan(sender: UIPanGestureRecognizer) {
    var cellFrame = sender.view!.frame

    let translation = sender.translationInView(sender.view!.superview!)

    switch sender.state {
    case .Began:
        println("Started")
    case .Changed:
        cellFrame.origin.x = translation.x

        println("Changed")
    default:
        break
    }
}

当我尝试拖动单元格时,我可以在日志中看到“已启动”和“已更改”,但屏幕上没有任何反应。我错过了什么?

1 个答案:

答案 0 :(得分:0)

您应该设置框架,而不是原点。 在执行任何操作之前,请保存初始原点x。 然后,在.Changed案例中,您可以:

let newFrame = CGRect(originX + translation.x, cellFrame.origin.y, cellFrame.size.width, cellFrame.size.height)
// then set your new frame..
cellFrame.frame = newFrame

此外,您可能想要添加翻译值。 translation.x表示移动的距离,而不是位置。