ячейка в UICollectionView, возвращающая ноль при попытке изменить UITextField в этой ячейке из контроллера - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть UICollectionViewController с указателем даты.Когда дата изменяется, она вызывает эту функцию:

var cell: InfoSection?

@objc func didChangeDate(sender: UIDatePicker) {
    let myDateFormatter: DateFormatter = DateFormatter()
    myDateFormatter.dateFormat = "MM/dd/yyyy hh:mm"

    let mySelectedDate: String = myDateFormatter.string(from: sender.date)
    cell?.dateTextField.text! = mySelectedDate as String
    print("mySelected Date is: ", mySelectedDate as String)
    print("The content of dateTextField is: ", cell?.dateTextField.text!)
}

InfoSection - это моя ячейка, которая содержит textField.

Ячейка отображается как ноль в этой строке:

cell?.dateTextField.text! = mySelectedDate as String

Я уверен, что здесь есть довольно очевидное решение, которого мне не хватает.Я попытался принудительно развернуть его - он падает.Я попытался установить переменную ячейку в значение = InfoSection() - она ​​печатает дату в выражении «context of dateTextField», но не изменяет textField.

И в некоторых ответах SO говорилось об изменении данных в ячейке через cellForItemAt indexPath, что имеет смысл, но я не знаю, как вызвать cell?.dateTextField.text! = mySelectedDate as String в cellForItemAt всякий раз, когда вызывается func didChangeDate.

Любая помощь будет потрясающей!И если вам нужна какая-либо другая информация, дайте мне знать, спасибо!

1 Ответ

0 голосов
/ 12 февраля 2019

Вы должны сохранить выбранную вами дату как переменную и перезагрузить вашу коллекцию следующим образом:

var mySelectedDate: String?

@objc func didChangeDate(sender: UIDatePicker) {
    let myDateFormatter: DateFormatter = DateFormatter()
    myDateFormatter.dateFormat = "MM/dd/yyyy hh:mm"

    mySelectedDate = myDateFormatter.string(from: sender.date)
    collectionView.reloadData()
}

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

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CellIdentifier", for: indexPath) as! InfoSection

    cell.dateTextField.text = mySelectedDate
    return cell
}
...