UICollectionView的索引路径日期

时间:2018-11-10 04:02:36

标签: ios swift uicollectionview

我有一个UICollection视图,我想在其中查看今天的日期并将其放入第一个单元格,然后在接下来的4天中再增加4个单元格。

我正在尝试找出正确的代码来索引这5天。

这是我的代码:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        return 5

}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = dateCollection.dequeueReusableCell(withReuseIdentifier: "dateCell", for: indexPath) as! DateCell

    let formatter = DateFormatter()
    formatter.dateFormat = "E"
    let weekday = formatter.string(from: Date())
    print(weekday)
    formatter.dateFormat = "dd"
    let day = formatter.string(from: Date())

    cell.day.text = String(weekday)
    cell.date.text = day

    return cell

}

这将在所有5个单元格中显示相同的日期。

如果我尝试使用`let weekday = formatter.string(from:Date()[indexPath.row)]

我得到了错误:

  

“日期”类型没有下标成员

我如何索引日期,以便每个单元格都包含类似于日历的第二天?

1 个答案:

答案 0 :(得分:2)

您需要将数据放入数组。然后,您的数据源方法可以使用数组提供所需的数据。

向视图控制器添加属性:

var dates = [Date]()

然后在viewDidLoad中,用您的日期填充数组。

override func viewDidLoad() {
    super.viewDidLoad()

    // any other code you need

    // populate array
    let today = Date()
    dates.append(today)
    for days in 1...4 {
        let date = Calendar.current.date(byAdding: .day, value: days, to: today)!
        dates.append(date)
    }
}

然后更新您的数据源方法:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return dates.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = dateCollection.dequeueReusableCell(withReuseIdentifier: "dateCell", for: indexPath) as! DateCell

    let date = dates[indexPath.row]

    let formatter = DateFormatter()
    formatter.dateFormat = "E"
    let weekday = formatter.string(from: date)

    formatter.dateFormat = "dd"
    let day = formatter.string(from: date)

    cell.day.text = "\(weekday)"
    cell.date.text = day

    return cell
}

这样做,您无需在数据源方法中对计数或特定日期进行硬编码。如果您想要不同的日期,只需更新viewDidLoad中的代码即可将所需的任何日期放入数组中。