我有两个字段,分别接受生日和周年日期。现在,如果生日或周年纪念日在接下来的30天内,我必须在表视图中显示它们。这是我想要实现的,就像这样。
let cell2: BestWishesTableViewCell = tableView.dequeueReusableCell(withIdentifier: "bdayWishesCellIdentifier") as! BestWishesTableViewCell
if indexPath.row < customerDetails.count {
let bdayObj = customerDetails[indexPath.row]
if Calendar.current.isDateInNextThirtyDays(bdayObj.birthday!) {
cell2.nameLabel.text = bdayObj.fname
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .none
cell2.dateLabel.text = formatter.string(from: bdayObj.birthday!)
} else if Calendar.current.isDateInNextThirtyDays(bdayObj.anniversary!) {
cell2.nameLabel.text = bdayObj.fname
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .none
cell2.dateLabel.text = formatter.string(from: bdayObj.anniversary!)
}
}
else {
let bdayObj = customerDetails2ArrTwo[indexPath.row - customerDetailsArrTwo.count]
if Calendar.current.isDateInNextThirtyDays(bdayObj.birthday!) {
cell2.nameLabel.text = bdayObj.fname
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .none
cell2.dateLabel.text = formatter.string(from: bdayObj.birthday!)
} else if Calendar.current.isDateInNextThirtyDays(bdayObj.anniversary!) {
cell2.nameLabel.text = bdayObj.fname
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .none
cell2.dateLabel.text = formatter.string(from: bdayObj.anniversary!)
}
return cell2
}在这里,在第一部分中,从if indexPath.row < customerDetails.count到else部分之前,我从一个表中获取数据,在else部分中,我从另一个表中获取数据。在我刚刚提到的第一部分中,我正在检查生日和周年纪念日是否在接下来的30天内(现在实际上bday和周年纪念日都在接下来的30天内,因为这是我给出的日期)。但是它只在表视图中显示生日,而不是周年日期,而这两个日期都应该显示在表视图中。
现在,由于我已经给了else if,我知道它将只执行第一个if条件。但是,即使我不使用else if,而是使用另一个if,结果仍然只显示了一个单元格(即一个日期)(这一次显示了周年日期),因为生日日期被周年日期覆盖了。
如何使生日和周年纪念日同时出现(即两个单元格)?
发布于 2018-03-26 23:29:18
你可以像下面这样做。基本上,您希望customerDetails数组中的每个对象都有两行。然后,使用行%2检查来确定它是偶数还是奇数
if indexPath.row < customerDetails.count * 2 {
let bdayObj = customerDetails[indexPath.row]
if indexPath.row % 2 == 0 {
if Calendar.current.isDateInNextThirtyDays(bdayObj.birthday!) {
cell2.nameLabel.text = bdayObj.fname
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .none
cell2.dateLabel.text = formatter.string(from: bdayObj.birthday!)
}
} else {
if Calendar.current.isDateInNextThirtyDays(bdayObj.anniversary!) {
cell2.nameLabel.text = bdayObj.fname
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .none
cell2.dateLabel.text = formatter.string(from: bdayObj.anniversary!)
}
}
}然而,当你在接下来的30天内有生日或周年纪念(即不是两者都有)时,这将不会很好地工作。
老实说,我认为你需要修改一下你是如何做到这一点的。你应该构建一个干净的数组,其中包含一个生日或周年纪念日的项目(如果需要的话,两个项目),它已经检查了它是否在接下来的30天内。这样,您就可以在基于indexPath.row的cellforItemAt中进行干净的查找。
https://stackoverflow.com/questions/49493458
复制相似问题