我正在从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()
是Date
扩展名,声明为
func dateByAddingDays(days:Int)->Date{
let calendar = Calendar(identifier: .gregorian)
var comp = DateComponents()
comp.day = days
return calendar.date(byAdding: comp, to: self)!
}
答案 0 :(得分:0)
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)