当用户按下tableView单元格中的按钮时,我需要从数组中获取该单元格的数据,其中填充了tableView。使用该数据后,将某个单元格从tableView中删除。
我正在使用标签来了解按下按钮的单元格的索引。但是,一旦tableView中间的一个单元格与数组中的数据一起被删除,tableView中向下的单元格现在具有带有不受数组绑定标记的按钮。例如:
array.length = 3
用户然后按下单元格1中的按钮,然后将其从数组和表格中删除:
现在的问题是,如果用户按下单元格2,当我尝试使用标签从数组中获取该单元格的数据时,应用程序将崩溃,因为我正在访问越界索引。因此,我开始认为使用标签不是一个好选择,我想知道什么是更好的替代品。这是我的代码:
var invitesArray = [userInfo]()
func declineInvite(sender: UIButton!) {
let info = invitesArray[sender.tag]
// I use info to process data
// Remove cell's data from array and remove cell from table
inviteTable.beginUpdates()
inviteTable.deleteRows(at: [IndexPath(row: sender.tag, section: 0)], with: UITableViewRowAnimation.automatic)
invitesArray.remove(at: sender.tag)
inviteTable.endUpdates()
}
// Populating the tableView
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = inviteTable.dequeueReusableCell(withIdentifier: "inviteCell", for: indexPath) as! joinCell
cell.declineButton.tag = indexPath.row
cell.declineButton.addTarget(self, action: #selector(self.declineInvite), for: UIControlEvents.touchUpInside)
return cell
}
有人可以帮助纠正我天真的方式吗?
答案 0 :(得分:1)
请勿使用标签。 UITableView有一个函数indexPathForCell,它将为您提供indexPath。由于在添加或删除项时模型应与tableView同步,因此应使用此indexPath索引数组。标签很少是必要的,通常是不好的做法。