2017-04-26 37 views
0

来揭示隐藏的文本我试图在用户从左向右滑动单元格时显示的UITableView中单元格的左侧放置日期字段。释放时,细胞应该弹回原位,隐藏日期字段。有谁知道如何做到这一点?它是否在如何通过滑动UITableViewCell

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

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

+0

做你正在寻找类似的iMessage应用的东西哪些日期在滑动屏幕上显示在聊天泡泡旁边? – GoodSp33d

+0

这基本上是一样的想法 –

+0

这可能适用于平底锅,但该UI可能完全不同,因为聊天气泡位于相反两侧,并且您有足够的空间在右侧显示日期,而无需重新加载顶部聊天气泡。 – GoodSp33d

回答

4

我不会在发布时使用编辑委托。

将单元格内容放入UIViewUIScrollView中,然后在您希望显示的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() 
    } 
} 
+0

我的目标是保持editActionsForRowAt以揭示右侧的一些按钮,但要使用平移动作显示左侧的日期文本。如果我使用scrollView,我会失去这种能力。我一直在看这个教程,来自Ray Wenderlich,https://www.raywenderlich.com/77974/making-a-gesture-driven-to-do-list-app-like-clear-in-swift-第1部分建议使用平移手势识别器。我想知道这是否可以与编辑委托人结合使用。 –

+0

在这种情况下,我会使用两侧的滚动视图,制作您自己的按钮,这样您可以做一个简单的检查,看看它已被移动到哪个方向来检查是否将其恢复到其原始位置 – SeanLintern88

+0

这是否带入内存管理问题?我读过的大多数内容都指向tableviews,对于大型数据数组更好 –