CollectionViewCell не является постоянным - PullRequest
0 голосов
/ 25 февраля 2019

Я не совсем уверен, как задать этот вопрос, но вот код, который я считаю важным ... все подключено и работает (я оставил другой код дизайна в ячейке, чтобы сделать вопрос более читабельным)

в первом фрагменте кода У меня есть пользовательская ячейка, которая по умолчанию задает значение переменной inCurrentMonth, равное False

class DateCollectionViewCell: UICollectionViewCell {


public var inCurrentMonth: Bool!

required init?(coder aDecoder: NSCoder) {
    super.init(coder:aDecoder)
    //You Code here
    inCurrentMonth = false
}

}

в приведенном ниже фрагменте кода, который я печатаюпеременная inCurrentMonth для каждой ячейки - ЭТО ВСЕГДА ПЕЧАТАЕТ ЛОЖЬ

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Calendar", for: indexPath) as! DateCollectionViewCell
    print(cell.inCurrentMonth)
}

последний фрагмент кода показывает представление коллекции, обновляющее переменную "inCurrentMonth" каждой ячейки при снятии с очереди.Если я распечатаю ячейки перед тем, как вернуть их, они явно имеют правильное значение для incurrentmonth.Когда, черт возьми, эта информация возвращается к ложному значению, несмотря ни на что ??

edit: значение для текста на этикетках корректно отображается в представлении коллекции при обновлении при удалении из очереди

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

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

    switch Direction {  

    case 0:
        if indexPath.row < DaysInMonths[month] + NumberOfEmptyBox{
            cell.DateLabel.text = "\(indexPath.row + 1 - NumberOfEmptyBox)"
            cell.inCurrentMonth = true
        } else {
            cell.DateLabel.text = "\(indexPath.row - DaysInMonths[month] - NumberOfEmptyBox + 1)"
            cell.DateLabel.textColor = UIColor.lightGray
            cell.inCurrentMonth = false
        }
    case 1:
        if indexPath.row < DaysInMonths[month] + NextNumberOfEmptyBox{
            cell.DateLabel.text = "\(indexPath.row + 1 - NextNumberOfEmptyBox)"
            ?????????????THIS DOES WORK?????????????
            cell.inCurrentMonth = true
        } else {
            !!!!!!!!!!!!!THIS DOES NOT WORK!!!!!!!!!!!!!!!
            cell.DateLabel.text = "\(indexPath.row - DaysInMonths[month] - NextNumberOfEmptyBox + 1)"
            cell.DateLabel.textColor = UIColor.lightGray
            cell.inCurrentMonth = false
        }
    case -1:
        if indexPath.row < DaysInMonths[month] + PreviousNumberOfEmptyBox{
            ?????????????THIS DOES WORK?????????????
            cell.DateLabel.text = "\(indexPath.row + 1 - PreviousNumberOfEmptyBox)"
            !!!!!!!!!!!!!THIS DOES NOT WORK!!!!!!!!!!!!!!!
            cell.inCurrentMonth = true
        } else {
            cell.DateLabel.text = "\(indexPath.row - DaysInMonths[month] - PreviousNumberOfEmptyBox + 1)"
            cell.DateLabel.textColor = UIColor.lightGray
            cell.inCurrentMonth = false
        }
    default:
        fatalError()
    }

    if Int(cell.DateLabel.text!)! < 1 { //here we hide the negative numbers or zero

        var previousMonth: Int = month-1
        if previousMonth == -1 {
            previousMonth = 11
        }
        let previousDay: Int = DaysInMonths[previousMonth] - NumberOfEmptyBox + (indexPath.row) + 1
        cell.DateLabel.text = "\(previousDay)"
        cell.DateLabel.textColor = UIColor.lightGray
        cell.inCurrentMonth = false
    }

1 Ответ

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

в приведенном ниже фрагменте кода я печатаю переменную inCurrentMonth для каждой из ячеек - ЭТО ВСЕГДА ПЕЧАТАЕТ ЛОЖЬ

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Calendar", for: indexPath) as! DateCollectionViewCell
    print(cell.inCurrentMonth)
}

dequeueReusableCell создает вместо этого новый экземпляр ячейкиДля этого, пожалуйста, используйте func cellForItem(at: IndexPath) -> UICollectionViewCell? метод UICollectionView

...