我正在用swift从this example开始制作日历。
到目前为止,这是结果,我只显示了从今天开始的7天。
我已添加了一个按钮,下周将显示。到目前为止,我已经尝试过:
func moveToNextWeek() {
self.startDateInWeek = self.startDateInWeek?.dateByAddingDays(days: 7)
DispatchQueue.main.async {
self.collectionView.performBatchUpdates({
}, completion: { (completed) in
self.collectionView.reloadData()
self.weekFlowLayout?.invalidateLayout()
})
}
}
这只是改变了变量
startDateInWeek
,当加载的视图被声明为startDateInWeek = Date()
(今天的日期)时。但是,当我按下按钮时,又增加了一个星期,但我必须手动滚动。
dateByAddingDays()
是声明为func dateByAddingDays(days:Int)->Date{
let calendar = Calendar(identifier: .gregorian)
var comp = DateComponents()
comp.day = days
return calendar.date(byAdding: comp, to: self)!
}
最佳答案
Calendar
提供了一种更好的方法来计算下周的开始,甚至取决于当前语言环境的第一个工作日设置:
let calendar = Locale.current.calendar
calendar.firstWeekday // Sunday == 1, Saturday == 7
let weekDayComponent = DateComponents(weekday:calendar.firstWeekday)
let startOfNextWeek = calendar.nextDate(after: Date(), matching: weekDayComponent, matchingPolicy: .nextTime)