首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用标记在TableView中检索数据

使用标记在TableView中检索数据
EN

Stack Overflow用户
提问于 2017-02-03 18:04:24
回答 1查看 658关注 0票数 0

当用户按下tableView单元格内的按钮时,我需要从填充tableView的数组中获取该单元格的数据。在将该数据用于某事物之后,该单元格将从tableView中移除。

我用标签来知道那个按下按钮的细胞的索引。但是,一旦tableView中间的单元格连同数组中的数据一起被移除,tableView中的单元格现在就有了标记超出数组绑定范围的按钮。例如:

代码语言:javascript
运行
复制
array.length = 3
  • 单元格0(按钮标签: 0)
  • 单元格1(按钮标签: 1)
  • 单元格2(按钮标签: 2)

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

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

现在的问题是,如果用户按下Cell 2,当我尝试使用标记从数组中获取该单元格的数据时,应用程序将崩溃,因为我正在访问一个超出界限的索引。因此,我开始认为使用标记不是一个好的选择,我想知道什么是更好的调剂。这是我的代码:

代码语言:javascript
运行
复制
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
}

有人能帮我纠正我天真的方式吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-03 18:24:06

不要为此使用标记。UITableView有一个函数indexPathForCell,它将为您提供indexPath。由于您的模型在添加或删除项时应该与您的tableView同步,所以应该使用这个indexPath对数组进行索引。标签很少是必要的,而且通常是错误的做法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42030374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档