2017-11-25 55 views
0

我已經建立了一個包含日期元素的數組。也就是說,根據當前日期,陣列是前一週和前一週的一個集合。本月每一天的新類實例?

 // ... 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,並以某種方式更新它們,我只是不知道如何。

任何幫助將非常讚賞,因爲我不能拿出實現這一邏輯。

回答

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 
    } 
} 
+0

感謝一大堆,重新計算日期,因爲您建議有意義。我意識到我沒有很準確地寫下我的問題(現在編輯)。我希望DataSource依賴於選定的日期,也就是當我更改日期時,填充單元格的數據更改爲特定日期。我懷疑(1)創建一個默認數據類,(2)將日期傳遞給自定義init中的參數以建立依賴關係,最後爲選擇日期視圖(pickerView)中的每個日期創建此數據類的實例。 – vas