【问题标题】:UITableView selected cell not getting deselectUITableView 选定的单元格没有被取消选择
【发布时间】:2021-08-28 11:58:30
【问题描述】:

我在 ViewController 中有一个 searchController 和 tableView,我可以在其中搜索 tableView 中的任何项目并选择该项目。我将所有选定的项目保存在其他 ViewController B 中。 现在,当我再次重定向到可以看到我选择的项目的 VC 时,我想从选定的单元格中取消选择一些项目,但是我无法取消选择选定的单元格,我可以毫无问题地选择所有其他取消选择的单元格。 当我点击所选单元格以取消选择时,我可以看到它没有调用以下方法。

tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)

在我的viewDidLoad 中,我有以下属性

tableView.isEditing = true
tableView.allowsMultipleSelectionDuringEditing = true

而且我没有使用任何自定义单元格。如果您有任何解决方案,请帮助我。 TIA。

【问题讨论】:

  • 如果一切设置正确,那么它应该可以正常工作。你可能错过了什么。请分享最低可重现代码。
  • @TusharSharma 我已在评论下方添加了我的代码,请您查看一下。

标签: ios swift xcode uitableview


【解决方案1】:

我已经解决了这个问题,这个问题与我设置单元格选择的方式有关我在cellForRow 方法中添加了以下行。

    if cellItem.isSelected {
       tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none)
    } else {
       tableView.deselectRow(at: indexPath, animated: true)
    }

【讨论】:

    【解决方案2】:

    您可以使用表视图数据源模型控制选择。

    假设您有一个对象数组,例如:var arr:[YourObject] = [] 然后将变量添加到 YourObject 例如:var isSelected: Bool = false

    cellForRow 方法中,检查您当前的项目选择状态并更改单元格选择样式。

    最后,在didSelectRow 方法中,更改您当前选择的对象isSelected 变量状态,然后重新加载表格视图

    【讨论】:

    • 我已经有一个具有isSelected 变量的对象,并且在cellForRow 我有cell.setSelected(cellItem.isSelected, animated: false) 你说要检查单元格的状态,这意味着我必须检查单元格是否被选中如果它被选中,那么我必须在需要时取消选择,对吗?
    • 没错,在didSelectRow 中执行此操作arr[indexPath.row].isSelected = !arr[indexPath.row].isSelectedtableView.reloadData(),因此,您的表格视图将从更新的数据源刷新其单元格选择状态。
    • 当我输入 tableView.reloadData() 时,它现在不允许我取消选择单元格。
    • 你能告诉我你的cellForRowdidSelectRow方法吗?
    • 你的数据源是allData还是favrtItems
    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    相关资源
    最近更新 更多