如何防止 UITableViewCell 重复和重用?

Posted

技术标签:

【中文标题】如何防止 UITableViewCell 重复和重用?【英文标题】:How to prevent UITableViewCell from duplicating and reusing? 【发布时间】:2015-06-12 12:50:31 【问题描述】:

我正在做一个练习,我在其中使用每行包含 4 个按钮的 tableview。 我想要做的是单击每行中的按钮以更改其状态(从正常到突出显示)。 问题是,单元格会自动复制我的点击,因此我没有点击的一些按钮会突出显示。 此外,每次我向下滚动表格视图并返回上一个位置时,突出显示的按钮位置都会自动更改。

我想这一定与我在代码中使用的 dequeReusableCell 机制有关。 如何防止这种情况发生?提前致谢!

构建单元格的代码:

        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
              let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! ChoiceCell
           cell.selectionStyle = .None
        return cell

【问题讨论】:

我相信您的问题在于您如何构建单元格object 而不是它的可重用性。请添加cellForRowAtIndexPath: 方法的代码以及您如何处理按钮操作。 代码已添加。谢谢。我正在使用deque 方法 【参考方案1】:

您绝对不想阻止单元格出队过程执行它所做的事情。这不是正确的方法。

相反,您的数据模型需要跟踪会影响单元格状态的事物(例如按钮是否突出显示)。当发生改变单元格状态的事情时,除了改变单元格的状态,还要更新你的数据模型。

现在,当该单元格滚动时,它可以被重新用于表示数据模型中的其他内容。然后,当我们滚动并准备好再次表示该原始数据对象时,我们使用我们的数据模型将单元格设置为正确的状态。

【讨论】:

感谢您的回答。问题是,例如,当我点击第一行的第一个按钮时,第七行的第一个按钮也会变成黑色(因为它是第一个未显示在视图中的单元格)。当点击第二行时,第八个单元格中的对应按钮也会突出显示,等等。如何解决这个问题?非常感谢。

以上是关于如何防止 UITableViewCell 重复和重用?的主要内容,如果未能解决你的问题,请参考以下文章

API接口如何防止参数被篡改和重放攻击?

如何防止 UITableViewCell 中的缩进 contentView 而不是 textLabel

如何防止 UITableViewCell 在部分刷新时丢失其选择状态?

如何防止 UITableViewCell 内的手势干扰 UITableView 的滚动?

API接口防止参数篡改和重放攻击

如何防止 UITextField 显示多行?