如何设置特定UITabelViewCell的背景色

时间:2019-03-30 19:43:07

标签: ios swift iphone uitableview date

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

首先。我正在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

如何解决此问题?预先感谢

1 个答案:

答案 0 :(得分:1)

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

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