使用较早的日期更改单元格的背景颜色

时间:2016-01-07 16:36:04

标签: ios swift nsdate tableviewcell

每个单元格包含日期和信息(文本)。默认情况下,排序顺序相反。它按照与时间相反的顺序排序。我想在当前日期之前更改单元格中单元格的背景颜色。

tableView cellForRowAtIndexPath:

  let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexpath) as! tableViewCell
  cell.dateLabel.text = stores.date
  cell.contentLabel.text = stores.content

  let today = NSDate()
  if today == (stores.date) {
    cell.backgroundColor = UIColor.blueColor()
  } else {
    cell.backgroundColor = UIColor.clearColor()
  }

  return cell

2 个答案:

答案 0 :(得分:0)

let today = NSDate()每次调用时都会(实际上)不同,因为它会在调用它的时间内获得NSDate,直到亚毫秒。此外,使用NSDate方法isEqualToDate:进行日期比较,因为==将简单地比较对象引用。所以你的问题是if today == (stores.date)总是会因为两个原因而失败。

尝试使用不太准确的日期,也许是当天,以进行此比较。您可以使用NSDateComponents从NSDate中删除时间。

答案 1 :(得分:0)

您的日期比较错误。使用NSCalendar按天比较NSDate。这里描述了良好的NSDate扩展Getting the difference between two NSDates in (months/days/hours/minutes/seconds)

extension NSDate {
    // ...
    func daysFrom(date:NSDate) -> Int{
        return NSCalendar.currentCalendar().components(.Day, fromDate: date, toDate: self, options: []).day
    }
    //...
}

在您的代码中使用此扩展程序:

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexpath) as! tableViewCell
  cell.dateLabel.text = stores.date
  cell.contentLabel.text = stores.content

  if (stores.date.daysFrom(NSDate()) == 0) {
    cell.backgroundColor = UIColor.blueColor()
  } else {
    cell.backgroundColor = UIColor.clearColor()
  }

  return cell