如何通过滑动UITableViewCell
来揭示隐藏的文本我试图在用户从左向右滑动单元格时显示的UITableView
中单元格的左侧放置日期字段。释放时,细胞应该弹回原位,隐藏日期字段。有谁知道如何做到这一点?它是否在如何通过滑动UITableViewCell
func tableView(_ tableView: UITableView, editActionsForRowAt: IndexPath) -> [UITableViewRowAction]? {
或以某种方式定义在自定义单元格内?
我不会在发布时使用编辑委托。
将单元格内容放入UIView
的UIScrollView
中,然后在您希望显示的UIScrollView
后面设置信息。
然后在滚动delegate
,scrollViewDidEndDragging
上,将contentOffset设置为0动画。
编辑:潘手势例如
如果你想为最简单的途径,建立了customContentView这是你的细胞大小的电池,泛姿态加入到这一点,那么设置和按钮,你想要的,我的例子下面我有一个按钮,每边。
注:这是SWIFT 2,但应该很容易翻译,我做了这个一个longgg时间前,当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()
}
}
我的目标是保持editActionsForRowAt以揭示右侧的一些按钮,但要使用平移动作显示左侧的日期文本。如果我使用scrollView,我会失去这种能力。我一直在看这个教程,来自Ray Wenderlich,https://www.raywenderlich.com/77974/making-a-gesture-driven-to-do-list-app-like-clear-in-swift-第1部分建议使用平移手势识别器。我想知道这是否可以与编辑委托人结合使用。 –
在这种情况下,我会使用两侧的滚动视图,制作您自己的按钮,这样您可以做一个简单的检查,看看它已被移动到哪个方向来检查是否将其恢复到其原始位置 – SeanLintern88
这是否带入内存管理问题?我读过的大多数内容都指向tableviews,对于大型数据数组更好 –
做你正在寻找类似的iMessage应用的东西哪些日期在滑动屏幕上显示在聊天泡泡旁边? – GoodSp33d
这基本上是一样的想法 –
这可能适用于平底锅,但该UI可能完全不同,因为聊天气泡位于相反两侧,并且您有足够的空间在右侧显示日期,而无需重新加载顶部聊天气泡。 – GoodSp33d