用户didDeselectRowAt?

时间:2018-08-24 18:24:57

标签: arrays swift uitableview

当用户取消选择单元格时,我正在尝试删除数组的一项。我了解为什么我的代码无法正常工作,基本上,该数组可能包含5个元素,并且如果有100个单元格,并且用户选择了10个单元格,则尝试通过indexPath.row取消选择它会崩溃,因为该数组只有5个元素。关键是当用户取消选择单元格时,应从数组中删除相应的元素。那就是我不确定如何做

var transferUsers = [UserModel]()

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
    if let cell = tableView.cellForRow(at: indexPath) {
        selectedUsersCount -= 1
        if selectedUsersCount == 0 {
            nextButton.isEnabled = false
        }
        cell.accessoryType = .none
        transferUsers.remove(at: indexPath.row)
    }
}

我尝试了this answer,但收到一条错误消息:

  

无法使用类型为((of:UserModel)'的参数列表调用'index'

1 个答案:

答案 0 :(得分:1)

好的,所以我认为您正在显示行列表,并且在选择单元格后,将用户添加到transferUsers数组中。问题是您不存储所选用户的位置。

对此的快速解决方案是拥有一个字典,该字典将索引路径与用户结合在一起。

var transferUsers: [IndexPath: UserModel] = [:]

然后,在选择用户后,您可以执行以下操作:

transferUsers[indexPath] = usersArray[indexPath.row]

,当取消选择用户时,您可以执行以下操作:

transferUsers.removeValue(forKey: indexPath)

selectedUsersCount可以是一个属性:

var selectedUsersCount: Int {
    return transferUsers.count
}

仅获取所选用户的列表,因为您有字典,所以您可以这样做:

transferUsers.values