首页 > 解决方案 > 从选定索引处的表视图中的数组中删除

问题描述

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

我首先声明了一个变量: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()
    }

这使行删除,但始终是第一个。无论我选择哪一行,它都会删除第一行。我怎样才能阻止这个?

标签: swiftuitableviewuibutton

解决方案


这行代码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


推荐阅读