每月每天的新班级实例?

时间:2017-11-25 14:17:53

标签: ios swift

我已经构建了一个包含日期元素的数组。也就是说,给定当前日期,该数组是前一周和前一周的集合。

     // ... 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的背景视图中显示的视图,带有日期的pickerView。 UICollectionViewController的DataSource需要依赖于这些日期。也就是说,用户将向每个CollectionCell填充信息,即他/她当天完成的活动。选择一个新日期(在pickerview中)将意味着一个全新的默认CollectionView数据源。

我现在想要实现的是(1)根据属于所选日期的数据更新我的UICollectionViewController,以及(2)作为日期进度(在现实生活中),超出我的间隔的旧信息去不存在和新的创造。

我怀疑我将dateArray连接到我的UICollectionViewController的DataSource,并以某种方式更新它们,我只是不知道如何。

任何帮助都将非常感激,因为我无法想出实现这一点的逻辑。

1 个答案:

答案 0 :(得分:0)

您应该始终重新计算视图即将出现的日期。然后定期运行计时器以检查日期是否已更改。当日期更改时,您重新计算日期并重新加载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
    }
}