我构建了一个包含日期元素的数组。也就是说,给定当前日期,该数组是前一周和前一周的集合。
// ... UIView class properties
var dateArray = [Date]()
// ... UIView class properties
func getDate() {
// get date in raw format
let minute: TimeInterval = 60
let hour: TimeInterval = 60 * minute
let day: TimeInterval = 24 * hour
for i in -7...7 {
let date = Date(timeIntervalSinceNow: day * Double(i))
dateArray.append(date)
}
}
此数据(格式化后)将用于 UICollectionViewController 的背景 View 中呈现的 View ,即带有日期的 pickerView。 UICollectionViewController 的数据源在某种程度上需要依赖于这些日期。也就是说,用户将在每个 CollectionCell 中填充信息,即他/她当天完成的事件。选择新日期(在选择器 View 中)将意味着一个全新的默认 CollectionView 数据源。
我现在想要实现的是(1)根据属于所选日期的数据更新我的 UICollectionViewController,以及(2)随着时间的推移(在现实生活中),超出我的时间间隔的旧信息会消失消失,新的被创造。
我怀疑我将 dateArray 连接到 UICollectionViewController 的数据源并以某种方式更新它们,我只是不知道如何。
任何帮助将不胜感激,因为我无法想出实现这一点的逻辑。
最佳答案
您应该始终重新计算 View 即将出现的日期。然后定期运行计时器来检查日期是否已更改。当日期更改时,您重新计算日期并重新加载 collectionView:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
var days: [Date] = []
var lastRefreshDate: Date?
var timer: Timer!
override func viewWillAppear(_ animated: Bool) {
refresh()
super.viewWillAppear(animated)
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in
self.refresh()
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
timer.invalidate()
}
private func refresh() {
if let date = lastRefreshDate,
Calendar.current.isDate(date, inSameDayAs: Date()){
return
}
days = (-7 ..< 8).flatMap { Calendar.current.date(byAdding: DateComponents(day: $0), to: Date())}
collectionView.reloadData()
}
}
extension ViewController: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return days.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "DateCollectionViewCell", for: indexPath) as? DateCollectionViewCell
cell.date = days[indexPath.row]
return cell
}
}
关于ios - 每月每一天的新类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47486967/