我需要选择多个tableview单元格,如果我再次单击,那么它应该取消选择。所以尝试下面的代码,但得到错误
如何附加选定的行arrSelectedRowsBuy
,当再次点击,然后如何从arrSelectedRowsBuy取消选择该单元格。请指导我
var arrSelectedRowsBuy:[Int] = []
var selectedIndexes : Set<Int> = []
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if selectedIndexes.contains(indexPath.row) {
self.arrSelectedRowsBuy.remove(at: eventListData?.result?.events?[indexPath.row].id ?? 0)
print("removed array \(arrSelectedRowsBuy)")
}
else {
self.arrSelectedRowsBuy.append(eventListData?.result?.events?[indexPath.row].id ?? 0)
print("added array \(arrSelectedRowsBuy)")
}
}
现在我不能删除取消选定的细胞id从arrSelectedRowsBuy
如果我点击第二次然后id添加第二次.如果我点击第二次如何删除添加的行
加法数组[1,3,3,2,2]
3条答案
按热度按时间5lwkijsr1#
你可以取一组selectedIndexes
然后在didselect方法中每次检查selectedIndexes是否包含当前indexPaht.row。如果包含,则取消选择并将其从selectedIndexes集中移除,否则选择它并将其插入selectedIndexes
kxeu7u2r2#
你不需要自己处理多个选择。
UITableView
有一个allowsMultipleSelection
属性:https://developer.apple.com/documentation/uikit/uitableview/1614938-allowsmultipleselection当行被选中或取消选中时,你会收到单独的委托回调。你的代码也会跟踪一些模型对象标识符,你可以在select/disexecute委托方法中继续这样做,或者只是向表视图请求
indexPathsForSelectedRows
:https://developer.apple.com/documentation/uikit/uitableview/1614864-indexpathsforselectedrows如果你确实想保持一个最新的模型标识符数组,你需要修改你的代码。你在数组的末尾插入一个标识符,但在数组中的位置删除一个标识符。这将删 debugging 误的项,或者当你试图删除一个比数组中的项数高的行索引时,它会崩溃。这可能值得一个单独的问题。
b09cbbtk3#
您正在使用
if selectedIndexes.contains(indexPath.row) { ... }
检查selectedIndexes
是否包含所选项目的索引,但您没有在任何地方使用实际索引更新selectedIndexes
。因此,if
条件总是失败,并且else
块将被执行。试试这个: