ios - 每月每一天的新类实例?

标签 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 的背景 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/

相关文章:

ios - 核心数据不覆盖对象

ios - 如何避免类似 View Controller 中的重复代码?

swift - 将类对象转换为不符合 NSCoding 的 NSData

ios - 我如何将数据传递给 swift4 中的变量?

swift - (SWIFT) (String,Any) 不可转换为字符串

ios - 不允许其他应用播放音乐

ios - 堆叠 UIView 动画和 block 的正确方法?

iphone - 设置 map View 中心坐标后,自定义注释 View 将从其 super View 中删除

ios - 在 Swift 中将对象添加到 NSMutableArray 时出错

ios - 如何清除 Swift 中的 UITextField 安全文本输入?