在tableview中显示多个单元格的问题

时间:2018-03-26 14:07:59

标签: ios swift uitableview

我有两个领域,它们是生日和周年纪念日。现在,如果生日或周年日期在接下来的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.countelse部分之前,我从一个表中获取数据,而在else部分中我从另一个表中获取数据。在我刚刚提到的第一部分中,我正在检查生日和周年纪念日是否在接下来的30天内(现在事实上,bday和周年纪念日都在接下来的30天内,因为这就是我所提供的)。但它只是在tableview中显示生日而不是周年纪念日,而两个日期应该已经显示在tableview中。

既然我已经给了else if,我知道它只执行第一个if条件。但即使我没有使用else if并使用另一个if代替,那么所发生的事情再次只显示了一个单元格(即一个日期)(这次显示了周年日期)生日被周年纪念日改写。

如何让生日和周年纪念日一起出现(即2个单元格)......?

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作。基本上,您希望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天内(或不是两者)都有生日或周年纪念日,那就不会有效。

老实说,我认为你需要修改你是如何做到这一点的。您应该构建一个干净的数组,其中包含生日或周年纪念日的一个项目(如果需要,还有2个项目),如果在接下来的30天内已经检查过它。这样,您可以在您的cellforItemAt中根据indexPath.row进行干净查找。