首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在表视图中显示多个单元格时出现问题

在表视图中显示多个单元格时出现问题
EN

Stack Overflow用户
提问于 2018-03-26 22:07:59
回答 1查看 62关注 0票数 0

我有两个字段,分别接受生日和周年日期。现在,如果生日或周年纪念日在接下来的30天内,我必须在表视图中显示它们。这是我想要实现的,就像这样。

代码语言:javascript
复制
    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天内,因为这是我给出的日期)。但是它只在表视图中显示生日,而不是周年日期,而这两个日期都应该显示在表视图中。

现在,由于我已经给了else if,我知道它将只执行第一个if条件。但是,即使我不使用else if,而是使用另一个if,结果仍然只显示了一个单元格(即一个日期)(这一次显示了周年日期),因为生日日期被周年日期覆盖了。

如何使生日和周年纪念日同时出现(即两个单元格)?

EN

回答 1

Stack Overflow用户

发布于 2018-03-26 23:29:18

你可以像下面这样做。基本上,您希望customerDetails数组中的每个对象都有两行。然后,使用行%2检查来确定它是偶数还是奇数

代码语言:javascript
复制
    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中进行干净的查找。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49493458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档