2017-04-26 54 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,對於大型數據數組更好 –