【问题标题】:How to set background color of a specific UITabelViewCell如何设置特定 UITableViewCell 的背景颜色
【发布时间】:2019-08-21 10:29:42
【问题描述】:

我有一个动态表格视图。 它提供整整一个月的特定信息。 每天都有自己的细胞。 目标是设置与今天相同日期的单元格的背景颜色。

首先。我在cellForRow indexPath 中设置了每个单元格的标签:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "MonthlyCell", for: indexPath)

        guard let monthlyCell = cell as? MonthlyTableViewCell else {
            fatalError("Designated cell couldn't found")
        }

        monthlyCell.tag = indexPath.row
        return monthlyCell
    }

我还有一个扩展名。这让我今天成为Int

extension Date {
    static var nowDayAsInt: Int {
        let calendar = Calendar.current
        let component = calendar.dateComponents([.day], from: Date())
        return component.day!
    }
}

最后,我在自己的类中更新了自定义单元格的背景:

class MonthlyTableViewCell: UITableViewCell {
    if Date.nowDayAsInt == (self.tag + 1) {
            self.setDiagonalGradientBackground()
            self.makeRoundedCorners()
        }
}

self.setDiagonalGradientBackground() & self.makeRoundedCorners() 也来自UIView 扩展,我认为名称是不言自明的。

结果:它总是设置两个或多个单元格背景颜色:

截图: https://imgur.com/a/FfzUgZO

我该如何解决这个问题?提前致谢

【问题讨论】:

  • 是滚动后的截图,单元格被重复使用了吗?添加else{self.setDefaultBackground()}
  • 是的。每当您向下滚动或更改屏幕并返回时,它都会重复
  • 然后只需添加else 语句即可设置默认背景颜色。在您设置渐变背景的“if Date.nowDayAsInt...”之后。
  • 感谢@Don 解决了问题
  • 你可以在prepareForReuse中重新设置,这是因为reut sed时单元格没有更改为默认值

标签: ios swift iphone uitableview date


【解决方案1】:

单元格被重复使用,如果您在特定条件下更改 UI,则必须添加 else 子句以设置默认值

class MonthlyTableViewCell: UITableViewCell {
    if Date.nowDayAsInt == self.tag {
        self.setDiagonalGradientBackground()
        self.makeRoundedCorners()
    } else {
        // set default appearance
    }
}

【讨论】:

  • 谢谢@Vadian。我想不出还有什么问题。解决了它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 2010-09-21
  • 2012-06-05
  • 1970-01-01
相关资源
最近更新 更多