仅允许在某些单元格上滑动

时间:2017-10-31 20:54:49

标签: ios swift uitableview swipe

我有一个tableview,它将根据按下的按钮更改其单元格。在第一个表视图中,我希望只有按下按钮才能刷单元格;如果不是那么应该禁用滑动功能。按下按钮后,tableview可以滑动并显示我想要的操作。但是当没有按下按钮时,单元格仍然可以通过“删除”操作进行滑动。如果单元格标签包含当前用户的名称,我也不希望可以滑动行。

我在底部添加了tableview的代码。我该如何解决?

第一张表的代码:

 override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
                let cell = tableView.cellForRow(at: indexPath) as! DetailsCell
                let detailsAction = UITableViewRowAction(style: UITableViewRowActionStyle.default, title: "Details") { (action , indexPath) -> Void in
                        if isCharacterButtonPressed == true { //if button is pressed
                            if cell.label != currentUser.name{
                                let viewController = self.storyboard?.instantiateViewController(withIdentifier: "SeeDetails") as! DetailsVC
                                viewController.person = cell.person            
        self.navigationController?.pushViewController(viewController, animated: true)
                            } else {
                              return .none
                             }
                            return [detailsAction] //makes cell swipe-able
                        } else { //if button is not pressed
                            return .none //do not make the cell swipe-able
                        }
               }

编辑:

我已使用canEditRow功能修复了它,但是这些红色圆圈显示在我刷卡时可以刷过的单元格的一侧。我该如何解决?我附上了它的截图: enter image description here

2 个答案:

答案 0 :(得分:4)

如果您检查是否在tableView(_: UITableView, editActionsForRowAt: IndexPath)中显示编辑操作,则用户体验会很邋in,因为当返回一系列空操作以不显示任何编辑操作时,该单元格显示为已刷新片刻,然后停止响应滑动。相反,您应该使用tableview(_:UITableView,canEditRowAt:IndexPath)检查是否显示单元格的编辑操作,然后使用其他功能实际显示单元格可刷卡时的操作。

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
   let cell = tableView.cellForRow(at: indexPath) as! DetailsCell
   if isCharacterButtonPressed == true && cell.label != currentUser.name{
      return true
   } else {
      return false
   }
}
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
   let cell = tableView.cellForRow(at: indexPath) as! DetailsCell
   let detailsAction = UITableViewRowAction(style: UITableViewRowActionStyle.default, title: "Details") { (action , indexPath) -> Void in
     let viewController = self.storyboard?.instantiateViewController(withIdentifier: "SeeDetails") as! DetailsVC
     viewController.person = cell.person            
     self.navigationController?.pushViewController(viewController, animated: true)
   }        
  return [detailsAction]        
}

答案 1 :(得分:0)

使用tableView(_: UITableView, editActionsForRowAt: IndexPath)MGSwipTableCell,创建一个bool(即allowSwipe),只允许编辑/滑动,如果bool为真