swift - 从选定索引处的表视图中的数组中删除
问题描述
我正在尝试删除我正在使用对象数组呈现的表格视图中的一行。我在角落添加了一个删除按钮,点击它应该删除选定的行,但无论我点击哪一行,它总是删除第一行。
我首先声明了一个变量:private var indexForCell = Int()
然后我使用didSelectRowAt
这样的 tableview 方法:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
indexForCell = indexPath.row
}
然后我使用我添加的按钮进行删除:
@IBAction func removePokemon(_ sender: UIButton) {
favourites.remove(at: indexForCell)
self.tableView.reloadData()
}
这使行删除,但始终是第一个。无论我选择哪一行,它都会删除第一行。我怎样才能阻止这个?
解决方案
这行代码private var indexForCell = Int()
是一个等待发生的错误。Int()
解析为零,代表第一行。因此,如果您从不选择一行,它将尝试删除第一行。
将变量设为可选:
private var indexForCell = Int?
然后重写你的删除功能:
@IBAction func removePokemon(_ sender: UIButton) {
guard let indexToRemove = indexForCell else {
print("No index selected")
return
}
favourites.remove(at: indexToRemove)
self.tableView.reloadData()
}
但是你没有告诉我们你的favourites.remove(at:
) 函数做了什么,也没有告诉我们你是如何填充表格视图的,所以很难判断是否还有其他问题。
(顺便说一句,有比重新加载整个表格视图更好的方法来删除单个单元格,但让我们专注于让您当前的方法暂时起作用。)
编辑:
如果您在每个单元格上都有一个删除按钮,您想删除该项目而不选择它,您需要一种方法来确定哪个单元格包含该按钮。我写了一个表格视图扩展,可以让你弄清楚。请参阅此链接:https ://stackoverflow.com/a/42043277/205185
推荐阅读
- oracle - oracle 表中的 CURRENT_TIMESTAMP
- c# - 以不同用户身份从备份恢复 SQL 数据库
- excel - 使用 VBA 将 ListColumn 从一个表复制到另一个表时没有错误也没有数据
- python - Pyinstaller - 错误消息:名称 Actor 未定义
- android - 如何在我的项目结构中设置位置?
- java - 如何在 mockito 中模拟地图?
- angular - 如果列表为空,如何禁用 mat-form-field 或 mat-autocomplete?
- python - 为什么这在 c++ 中不起作用但在 python 中起作用
- visual-studio - 在 CMake 中添加 gRPC::grpc++ 库依赖后,libprotocd.lib 的意外路径
- django - 将模型传递给模板时,类视图错误“未定义名称‘上下文’”