使用标签在TableView中检索数据的问题

时间:2017-02-03 18:04:25

标签: ios swift uitableview swift3

当用户按下tableView单元格中的按钮时,我需要从数组中获取该单元格的数据,其中填充了tableView。使用该数据后,将某个单元格从tableView中删除。

我正在使用标签来了解按下按钮的单元格的索引。但是,一旦tableView中间的一个单元格与数组中的数据一起被删除,tableView中向下的单元格现在具有带有不受数组绑定标记的按钮。例如:

array.length = 3
  • 单元格0(按钮标记:0)
  • 单元格1(按钮标记:1)
  • Cell 2(按钮标记:2)

用户然后按下单元格1中的按钮,然后将其从数组和表格中删除:

  • 单元格0(按钮标记:0)
  • Cell 2(按钮标记:2)

现在的问题是,如果用户按下单元格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
}

有人可以帮助纠正我天真的方式吗?

1 个答案:

答案 0 :(得分:1)

请勿使用标签。 UITableView有一个函数indexPathForCell,它将为您提供indexPath。由于在添加或删除项时模型应与tableView同步,因此应使用此indexPath索引数组。标签很少是必要的,通常是不好的做法。