ios - 如何通过滑动 UITableViewCell 显示隐藏文本

标签 ios swift uitableview animation

我试图在 UITableView 中的单元格左侧放置一个日期字段,当用户从左向右滑动单元格时会显示该日期字段。释放后,单元格应弹回原位,隐藏日期字段。有谁知道如何做到这一点?是否在处理

func tableView(_ tableView: UITableView, editActionsForRowAt: IndexPath) -> [UITableViewRowAction]? {

或以某种方式在自定义单元格中定义?

最佳答案

我不会像您发布的那样使用编辑委托(delegate)。

将单元格内容放入 UIViewUIScrollView 中,然后设置要显示的 UIScrollView 背后的信息。

然后在滚动 delegate 上,scrollViewDidEndDragging,将 contentOffset 设置回 0 动画。

编辑:平移手势示例

如果您想要最简单的路线,请使用与您的单元格大小相同的 customContentView 设置您的单元格,向其添加平移手势,然后设置您想要的按钮,在我下面的示例中,我的每一侧都有一个按钮。

注意:这是swift 2,但应该很容易翻译,我很久以前发布swift 2时就做了这个,它可以重构

var savedX = 0 as CGFloat
var buttonWidth = 60 as CGFloat
var open = false

func panGestureHandler(gesture: UIPanGestureRecognizer) {

    if gesture.state == .Changed {
        let translation = gesture.translationInView(tagView)

        let difference = -translation.x

        if difference > 0 && !allowScrollRight {
            return
        }

        let newConstant = savedX + difference

        tagViewCenterXConstraint.constant = newConstant

        let alpha = abs(tagViewCenterXConstraint.constant) / buttonWidth

        deleteButton.alpha = min(alpha, 1)
        followButton.alpha = min(alpha, 1)

        if let action = swipe {
            action(self)
        }
    }

    if gesture.state == .Ended {
        let translation = gesture.translationInView(self)

        let trans = fabs(translation.x)

        open = !open && trans > buttonWidth

        if open {
            if(translation.x > 0){
                resetRight(true)
            } else {
                if allowScrollRight {
                    resetLeft(true)
                }
            }
        } else {
            resetView(true){

            }
        }
    }
}

 func resetLeft (animated : Bool) {
        tagViewCenterXConstraint.constant = self.buttonWidth
        savedX = self.buttonWidth


    if animated {
        UIView.animateWithDuration(0.5, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.7, options: [UIViewAnimationOptions.CurveEaseIn, UIViewAnimationOptions.BeginFromCurrentState], animations: { () -> Void in
            self.tagView.layoutIfNeeded()
            self.leftView.layoutIfNeeded()
            self.rightView.layoutIfNeeded()

            }, completion: { (finished) -> Void in
        })
    }
}

func resetRight (animated : Bool) {
    tagViewCenterXConstraint.constant = -self.buttonWidth
    savedX = -self.buttonWidth

    if animated {
        UIView.animateWithDuration(0.5, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.7, options: [UIViewAnimationOptions.CurveEaseIn, UIViewAnimationOptions.BeginFromCurrentState], animations: { () -> Void in
            self.tagView.layoutIfNeeded()
            self.leftView.layoutIfNeeded()
            self.rightView.layoutIfNeeded()

            }, completion: { (finished) -> Void in
        })
    }
}

func resetView (animated : Bool, completion: () -> Void ) {
    tagViewCenterXConstraint.constant = 0
    savedX = 0
    open = false

    if animated {
        UIView.animateWithDuration(0.5, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.7, options: [UIViewAnimationOptions.CurveEaseIn, UIViewAnimationOptions.BeginFromCurrentState], animations: { () -> Void in
            self.tagView.layoutIfNeeded()
            self.leftView.layoutIfNeeded()
            self.rightView.layoutIfNeeded()

            }, completion: { (finished) -> Void in
                completion()
        })
    } else {
        completion()
    }
}

关于ios - 如何通过滑动 UITableViewCell 显示隐藏文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43628672/

相关文章:

ios - 具有多个部分的 TableView 仅在每个部分中选择一行

iphone - 使用 xib 加载单元时的表格 View 单元重新创建

ios - swift中静态函数和单例类的区别

ios - 为 arm64 或 arm7s 编译支持 OpenSSL FIPS 的库时,CPU 类型未知

ios - swift 在其他 View Controller 中启动计时器

ios - 如何在 AFNetworking 中设置内容类型?

objective-c - 如何在作为 UITableView 的 subview 的 UIButton 上捕获任何触摸事件

ios - swift 4 : 'substring(to:)' is deprecated

swift - 如何在单独的函数中以编程方式快速创建 UIImageView?

ios - 来自搜索的 TableView 数据未正确更新