0

我需要開發一個表格視圖,其行編輯操作類似於iOS通知中心。
迄今爲止我所使用的資源,說我只能編輯背景顏色和編輯動作的寬度。我想要的是像iOS Notifications Center中的通知那樣的自定義外觀。在類似於ios通知中心的表格視圖中編輯動作

查看帶註釋的部分。這就是我要的。

See the annotated portion

這是我迄今管理:|

This is what I have managed so far :|

任何幫助/指導將不勝感激!
在此先感謝!

+0

您是否嘗試過使用圖像爲:'action.backgroundColor =的UIColor(patternImage:UIImage的(命名爲: 「rowActionPic」))' – D4ttatraya

+0

@DashAndRest我做到了。 ...呃......你看到我的行背景是如何比實際行高稍小一點的?所以發生了什麼,當我使用patternImage(並且我還設置了roundedCorners來實現iOS通知中心的外觀)時,我結束了重複的圖像,一個在另一個之下...此外,我無法弄清楚如何更改顏色每個動作中的文本:| –

+0

有添加滑動操作的自定義庫 - 您可以查看他們的代碼,並更改必要的部分。 – Losiowaty

回答

0

我結束了創建我自己的意見表視圖單元的一部分,並添加自定義動畫..

示例代碼:
在我tableViewController:

override func viewDidLoad() { 
    super.viewDidLoad() 
    .... 

    let tapGesture = UITapGestureRecognizer.init(target: self, action: #selector(handleTap)) 
    tableView.addGestureRecognizer(tapGesture) 

    let leftSwipeGesture = UISwipeGestureRecognizer.init(target: self, action: #selector(handleLeftSwipe(_:))) 
    leftSwipeGesture.direction = .left 
    tableView.addGestureRecognizer(leftSwipeGesture) 

    let rightSwipeGesture = UISwipeGestureRecognizer.init(target: self, action: #selector(handleRightSwipe(_:))) 
    rightSwipeGesture.direction = .right 
    tableView.addGestureRecognizer(rightSwipeGesture) 
} 

func handleTap(_ gestureRecognizer: UISwipeGestureRecognizer) { 
    let point = gestureRecognizer.location(in: self.tableView) 
    if let indexPath = self.tableView.indexPathForRow(at: point) { 
     var shouldSelectRow = false 
     if indexPathBeingEdited != nil { 
      if indexPath == indexPathBeingEdited { 
       shouldSelectRow = true 
      } else { 
       //handle close of the cell being edited already 
       if let previousEditedCell = tableView.cellForRow(at: indexPathBeingEdited!) as? NotificationCenterTableViewCell { 
        previousEditedCell.closeEditActions() 
        indexPathBeingEdited = nil 
       } 
      } 
     } else { 
      shouldSelectRow = true 
     } 
     if shouldSelectRow { 
      tableView.selectRow(at: indexPath, animated: true, scrollPosition: .middle) 
      tableView(tableView, didSelectRowAt: indexPath) 
     } 
    } 
} 

func handleLeftSwipe(_ gestureRecognizer: UISwipeGestureRecognizer) { 
    let point = gestureRecognizer.location(in: self.tableView) 
    if let indexPath = self.tableView.indexPathForRow(at: point) { 
     if indexPathBeingEdited != nil { 
      if indexPath == indexPathBeingEdited { 
       //Do nothing 
      } else { 
       //handle close of the cell being edited already 
       if let previousEditedCell = tableView.cellForRow(at: indexPathBeingEdited!) as? NotificationCenterTableViewCell { 
        previousEditedCell.closeEditActions() 
        indexPathBeingEdited = nil 
       } 
      } 
     } 
     //proceed with left swipe action 
     if let cell = tableView.cellForRow(at: indexPath) as? NotificationCenterTableViewCell { 
      cell.handleLeftSwipe(gestureRecognizer) 
      let notification = notificationsArray[indexPath.section].notificationItems[indexPath.row] 

      //Update the title of Read button 
      if notification.isNotificationRead { 
       cell.readUnreadButtonLabel.text = "Unread" 
      } else { 
       cell.readUnreadButtonLabel.text = "Read" 
      } 
      indexPathBeingEdited = indexPath 
     } 
    } 
} 

func handleRightSwipe(_ gestureRecognizer: UISwipeGestureRecognizer) { 
    let point = gestureRecognizer.location(in: self.tableView) 
    if let indexPath = self.tableView.indexPathForRow(at: point) { 
     if indexPathBeingEdited != nil { 
      if indexPath == indexPathBeingEdited { 
       if let cell = tableView.cellForRow(at: indexPath) as? NotificationCenterTableViewCell { 
        cell.closeEditActions() 
        indexPathBeingEdited = nil 
        //Update the title of Read button 
        cell.readUnreadButtonLabel.text = "Read" 
       } 
      } else { 
       //handle close of the cell being edited already 
       if let previousEditedCell = tableView.cellForRow(at: indexPathBeingEdited!) as? NotificationCenterTableViewCell { 
        previousEditedCell.closeEditActions() 
        indexPathBeingEdited = nil 
        //Update the title of Read button 
        previousEditedCell.readUnreadButtonLabel.text = "Read" 
       } 
      } 
     } 
    } 
} 

在我的表查看單元格:

func handleLeftSwipe(_ gestureRecognizer: UISwipeGestureRecognizer) { 
    if !isBeingEdited { 
     //Action to open the edit buttons 
     UIView.animate(withDuration: 0.5, animations: { 
      self.notificationHolderViewLeadingConstraint.constant -= 248 
      self.notificationHolderViewTrailingConstraint.constant -= 248 

      self.editActionsView.isHidden = false 
      self.layoutIfNeeded() 
     }, completion: { (success) in 

     }) 
     isBeingEdited = true 
    } 
} 

func closeEditActions() { 
    if isBeingEdited { 
     //Action to open the edit buttons 
     UIView.animate(withDuration: 0.5, animations: { 
      self.notificationHolderViewLeadingConstraint.constant += 248 
      self.notificationHolderViewTrailingConstraint.constant += 248 

      self.editActionsView.isHidden = true 
      self.layoutIfNeeded() 
     }, completion: { (success) in 

     }) 
     isBeingEdited = false 
    } 
} 


override func draw(_ rect: CGRect) { 
    if let viewToRound = editActionsView { 
     let path = UIBezierPath(roundedRect:viewToRound.bounds, 
           byRoundingCorners:[.topRight, .topLeft, .bottomRight, .bottomLeft], 
           cornerRadii: CGSize(width: 20, height: 20)) 

     let maskLayer = CAShapeLayer() 

     maskLayer.path = path.cgPath 
     viewToRound.layer.mask = maskLayer 
    } 
}  

只是FYI,我有我的編輯按鈕,即讀/查看/清除已添加到editActionsView。相應的動作與我的tableViewCell類中的IBAction掛鉤。

的結果是這樣的:

Final look

相關問題