【问题标题】:UITableView changing things of some cells in SwiftUITableView 改变 Swift 中某些单元格的内容
【发布时间】:2015-12-28 16:30:17
【问题描述】:

我有一个带有自定义 UITalbeCellView 的 UITableView。每个单元格都有一个标题、正文和日期。当我获取数据时某些标题必须是红色的,因此对于那些标题必须为红色的单元格,有一个 Bool 设置为 true。

第一次获取数据时看起来不错,但是当您上下滚动几次时,所有标题最终都变成了红色

我使用结构数组来存储数据,并且在 cellForRowAtIndexPath 上有一个 if 并且如果该数组位置的布尔值为真,我将颜色更改为红色:

let cell = tableView.dequeueReusableCellWithIdentifier("CommentsRowTVC", forIndexPath: indexPath) as! CommentsRowTVC
let single_comment = self.AOS[indexPath.row]

cell.titulo_comentario?.text = single_comment.titulo_comment
if single_comment.flag == true {
    cell.titulo_comentario.textColor = UIColor.redColor()
}

我想它会重用视图或类似的东西。这有什么简单的解决方法吗?还是我必须实现自己的 TableView 以防止这种情况发生? 我还认为 dequeueReusableCellWithIdentifier 方法可能是导致我的问题的方法......但我是 swift 新手,想不出任何替代方法。

在单元格上的按钮上发生类似的事情,当您单击单元格中的按钮时,它会更改其颜色并禁用它,但只是该单元格上的按钮。然而,当点击一个单元格时,来自其他单元格的按钮也会受到这些变化的影响。

【问题讨论】:

    标签: ios xcode swift uitableview


    【解决方案1】:

    由于单元格被重复使用,您最终会得到以前为红色的单元格,因为它们有single_comment.flag == true,现在用于实际存在single_comment.flag == false 的另一行。您必须再次重置 else 分支中的颜色:

    if single_comment.flag == true {
        cell.titulo_comentario.textColor = UIColor.redColor()
    } else {
        cell.titulo_comentario.textColor = UIColor.whiteColor()
    }
    

    UITableViews 重复使用它们的单元格,这意味着您将在 cellForRowAtIndexPath 中获得以前使用过的单元格,可能已将 textColor 设置为红色。您现在的工作是将文本的颜色恢复到其原始状态。

    通常,您在单元格自定义的if-branch 中所做的任何更改都必须在else-branch 中撤消。如果您删除了if 中的标签,请将其添加到else

    【讨论】:

    • 效果很好,谢谢。但是,当我从 cell.myButton.addTarget 调用的函数中更改按钮的颜色时。我怎样才能恢复这些更改?
    • @PabloDuque 我尽量不要更改cellForRowAtIndexPath 之外的单元格。我尝试在自定义数据结构中反映指定单元格显示的所有属性,并且每当需要更改单元格时,我都会更改数据结构中的相应属性并重新加载行或整个 tableView。
    • 如何读取来自cellForRowAtIndexPath的按钮点击??
    • @PabloDuque 你不知道。但是您有一个 AOS 数组,您可能在其中存储了一些自定义类的实例。我会向该类添加一个名为“clicked”的属性,然后在cellForRowAtIndexPath 中根据是否设置clicked 以不同的样式显示单元格。
    • 它有点复杂,因为我在云数据库上获得了一些数据,当单击按钮时我必须更新这些数据,并且一些数据更改是本地的,但您的想法应该可行。非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多