Даты индексации для UICollectionView - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть представление UICollection, в котором я хочу взять сегодняшнюю дату и поместить ее в первую ячейку, а затем добавить еще 4 ячейки в течение следующих 4 дней.

Я пытаюсь найти правильный код для индексации в течение этих 5 дней.

Вот код, который у меня есть:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        return 5

}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = dateCollection.dequeueReusableCell(withReuseIdentifier: "dateCell", for: indexPath) as! DateCell

    let formatter = DateFormatter()
    formatter.dateFormat = "E"
    let weekday = formatter.string(from: Date())
    print(weekday)
    formatter.dateFormat = "dd"
    let day = formatter.string(from: Date())

    cell.day.text = String(weekday)
    cell.date.text = day

    return cell

}

Отображает одну и ту же дату во всех 5 ячейках.

Если я попытаюсь использовать `let weekday = formatter.string (from: Date () [indexPath.row)]

Я получаю ошибку:

Тип «Дата» не имеет подписных элементов

Как бы я указала указатель даты, чтобы каждая ячейка содержала следующий день, похожий на календарь?

1 Ответ

0 голосов
/ 10 ноября 2018

Вам нужно поместить ваши данные в массив. Тогда ваши методы источника данных могут использовать массив для предоставления необходимых данных.

Добавьте свойство к вашему контроллеру представления:

var dates = [Date]()

Затем в viewDidLoad заполните массив датами.

override func viewDidLoad() {
    super.viewDidLoad()

    // any other code you need

    // populate array
    let today = Date()
    dates.append(today)
    for days in 1...4 {
        let date = Calendar.current.date(byAdding: .day, value: days, to: today)!
        dates.append(date)
    }
}

Затем обновите методы источника данных:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return dates.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = dateCollection.dequeueReusableCell(withReuseIdentifier: "dateCell", for: indexPath) as! DateCell

    let date = dates[indexPath.row]

    let formatter = DateFormatter()
    formatter.dateFormat = "E"
    let weekday = formatter.string(from: date)

    formatter.dateFormat = "dd"
    let day = formatter.string(from: date)

    cell.day.text = "\(weekday)"
    cell.date.text = day

    return cell
}

При этом вам не нужно жестко задавать количество или конкретные даты в методах источника данных. Если вам нужны разные даты, просто обновите код в viewDidLoad, чтобы поместить в массив любые даты, которые вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...