我有一个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)]
我得到了错误:
“日期”类型没有下标成员
我如何索引日期,以便每个单元格都包含类似于日历的第二天?
答案 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
中的代码即可将所需的任何日期放入数组中。