从选定索引处的表视图中的数组中删除

Delete from array in a tableview at the selected index

我正在尝试删除我使用对象数组呈现的表视图中的一行。我在角落添加了一个删除按钮,点击它应该删除 selected 行,但它总是删除第一行,无论我点击哪一行。

我先声明了一个变量:private var indexForCell = Int() 然后我使用 tableview 方法 didSelectRowAt 像这样:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        indexForCell = indexPath.row
    }

然后我使用我添加的删除按钮:

    @IBAction func removePokemon(_ sender: UIButton) {
        favourites.remove(at: indexForCell)
        self.tableView.reloadData()
    }

这会使行删除但始终是第一行。无论我 select 的哪一行,它总是删除第一行。我该如何阻止它?

代码行 private var indexForCell = Int() 是一个等待发生的错误。 Int() 解析为零,代表第一行。因此,如果您从未 select 一行,它将尝试删除第一行。

使变量成为可选的:

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:) 函数是做什么的,也没有告诉我们你是如何填充你的 table 视图的,所以很难判断是否还有其他问题,因为嗯。

(顺便说一句,有比重新加载整个 table 视图更好的方法来删除单个单元格,但让我们集中精力让当前的方法发挥作用。)

编辑:

如果每个单元格上都有一个删除按钮,您想在不 select 的情况下删除该项目,则需要一种方法来确定哪个单元格包含该按钮。我写了一个 table 视图扩展,可以让你弄明白。看到这个 link: