【问题标题】:Swiping Allowed Only On Certain Cells仅在某些单元格上允许刷卡
【发布时间】:2017-10-31 20:54:48
【问题描述】:

我有一个表格视图,它将根据按下的按钮更改其单元格。在第一个表格视图中,我希望只有在按下按钮时才能滑动单元格;如果不是,则应禁用滑动功能。按下按钮时,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 函数修复了它,但是这些红色圆圈出现在我滑动时可以滑动的单元格的一侧。我该如何解决?我附上了它的截图:

【问题讨论】:

    标签: ios swift uitableview swipe


    【解决方案1】:

    如果您在tableView(_: UITableView, editActionsForRowAt: IndexPath) 中检查是否显示编辑操作,用户体验会很草率,因为当返回一个空的操作数组以不显示任何编辑操作时,单元格看起来好像被刷了一会儿然后停止响应滑动。相反,您应该检查是否显示单元格的编辑操作,使用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]        
    }
    

    【讨论】:

      【解决方案2】:

      使用tableView(_: UITableView, editActionsForRowAt: IndexPath)MGSwipTableCell,创建一个布尔值(即allowSwipe),仅当布尔值为真时才允许编辑/滑动

      【讨论】:

        猜你喜欢
        • 2021-01-23
        • 1970-01-01
        • 2014-07-07
        • 2017-10-08
        • 2012-11-21
        • 2014-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多