删除行UITableView索引问题

Blu*_*Boy 13 uitableview ios swift

我正在使用下面的代码删除tableview中的一行.首先,我从数组中删除对象,然后使用以下代码从tableview中删除:

let i = IndexPath(item: rowNum, section: 0)
myArray.remove(at: rowNum)
myTableView.deleteRows(at: [i], with: UITableViewRowAnimation.left)
Run Code Online (Sandbox Code Playgroud)

但是,如果我之后删除了另一行,则不会删除我想要删除的行.问题是,即使我删除了tableview中的第一项(例如索引0),单击新的第一行将返回索引1 ...这是错误的,并删除第二行.删除第一行后,顶部的新行应该具有0的索引.

我可以通过这样做来解决这个问题:

mTableView.reloadData()
Run Code Online (Sandbox Code Playgroud)

但这似乎错了......我不应该再次重新加载所有数据.

我还可以做些什么?

编辑:我在tableviewcell中有一个自定义按钮我要按删除行 - 不要刷卡.

Dhi*_*iru 7

问题

您遇到的问题是您在按钮上设置的标记,删除行时按钮标记不会更改,因为它的所有单元格都没有重新加载.我想你正在设置标签cellforRowIndexpath 你尝试将标签放在按钮上tableWillDisplayCell

要么

最好的方法是在下面.

你可以通过IndexPath 其他方式获得

假设您的视图层次结构是

UITableViewCell-> contentView - >按钮

在你按钮点击方法

 if let cell = sender.superview?.superview as? UITableviewCell{
        let indexPath = myTableView.indexPath(for: cell)
    // Now delete the table cell
    myArray.remove(at: indexPath.row)
    myTableView.beginUpdates()
    myTableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.left)
    myTableView.endUpdates()
}
Run Code Online (Sandbox Code Playgroud)

我希望这对你有用.


Vam*_*hna 0

尝试这个!

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {

        //1. remove data from model
        data.remove(at: indexPath.row)

        //2. remove row from view
        tableView.deleteRows(at: [indexPath as IndexPath], with: .fade)
    }
}
Run Code Online (Sandbox Code Playgroud)