选择 TableView 单元格激活多个部分的行中的复选标记

Selecting TableView Cell Activates Checkmark in Rows in Multiple Sections

我在 cellForRowAt 中使用以下代码实现了复选标记(当行被 selected 时):

// Add a checkmark to row when selected
    if selectedIngredients.contains(indexPath.row) {
        cell.accessoryType = .checkmark
    } else {
        cell.accessoryType = .none
    }

然而,当我 select 一行时,each 部分的 index.row 得到复选标记:

这似乎是因为我只指定了 indexPath.row,而不是部分。我如何编写此代码,以便 只有 我 selected 部分中的 selected 行得到复选标记?

您应该在 didSelect 方法中添加复选标记,并在 didDeselect 方法中删除它们;

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
    // update cell here
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    // update cell here
}

另外,看看这个答案;

像这样使用数据存储来保存复选标记:

var selectedIngredients: Set<IndexPath> = [] // use set for unique save

然后选择回调:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
        if self.selectedIngredients.contains(indexPath) {
            self.selectedIngredients.remove(indexPath)
            
        } else {
            self.selectedIngredients.insert(indexPath)
        }
        
        self.tableView.reloadData()
    }

在 CellForRow 中重新加载后:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if selectedIngredients.contains(indexPath) {
        cell.accessoryType = .checkmark
    } else {
        cell.accessoryType = .none
    }
}

如果你希望它只有一行包含复选标记:

var selectedIngredients: IndexPath? = nil

并选择回调:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
            self.selectedIngredients = indexPath
        }

最后:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if selectedIngredients == indexPath {
            cell.accessoryType = .checkmark
        } else {
            cell.accessoryType = .none
        }
    }