2016-03-06 3 views
0

У меня есть коллекцияView с двумя разделами, каждая секция должна основываться на одной и той же ячейке (в которой содержится только UIImageView). Единственное различие между разделами - количество ячеек, которые они должны содержать, и типы отображаемых изображений.Swift collectionView ячейка без повторного использования

Если я установил метод cellforItemAtIndexPath для использования деактивированной ячейки (collectionView.dequeueReusableCellWithIdentifier), все будет нормально заполняться, если я установил его для использования экземпляра моей пользовательской ячейки без удаления, он сработает.

метод

cellForItemAtIndexPath:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     //cannot use dequedReusableCell since some cells below scroll-line should remain highlighted 
     let cell = NumbersCollectionViewCell() // CAUSES CRASH 
//  let cell = collectionView.dequeueReusableCellWithReuseIdentifier(Constants.cellIdentifier, forIndexPath: indexPath) as! NumbersCollectionViewCell // WORKS FINE 
     switch indexPath.section { 
     case 0: cell.imageView.image = UIImage(named: numberImageFiles[indexPath.row]) 
     case 1: cell.imageView.image = UIImage(named: specialNumberImageFiles[indexPath.row]) 
     default: break 
     } 
     return cell 
    } 

NumbersCollectionViewCell определение:

class NumbersCollectionViewCell: UICollectionViewCell { 
    @IBOutlet weak var imageView: UIImageView! 
} 

Ошибка, которая появляется, это: "Фатальная ошибка: неожиданно нашли ноль в то время как разворачивание необязательное значение" и выдвигает на первый план «случай 0 "в моем методе cellForItemAtIndexPath.

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

+0

оказывается, мой вопрос не имеет ничего общего с клетками или извлечения из очереди не ... все это было в методах didSelect и didDeselectCellAtIndexPath ... но был моя проблема была связана с клетками извлечения из ниже ответа был бы работал. – Flip

ответ

0

Предполагая, что у вас есть и .swift и .xib файл для ячейки, вам нужно создать экземпляр NumbersCollectionViewCell так: Э.Г.

let numbersCollectionViewCell = UINib(nibName: "NumbersCollectionViewCell", bundle: bundle).instantiateWithOwner(nil, options: nil)[0] as! NumbersCollectionViewCell 

В противном случае ваш IBOutlet s не будет подключен.

+0

Итак, у меня не было .xib, но я удалил свой файл NumbersCollectionViewCell.swift и снова создал его с помощью .xib. Проблема в том, что когда я ввожу код, который вы предложили, Xcode предоставляет предупреждение в этой строке, в котором говорится: «Бросьте из [AnyObject]!» к несвязаному типу «NumbersCollectionViewCell» всегда терпит неудачу », когда я запускаю приложение на симуляторе, он сбрасывает выделение этой строки, но не дает сообщений в консоли – Flip

+0

Извините, мой ответ был неправильным, я обновил его сейчас. – paulvs

0
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    guard let cell = collectionView.dequeueReusableCellWithReuseIdentifier(identifier: "NumbersCollectionViewCell">, forIndexPath: NSIndexPath>) as? NumbersCollectionViewCell else { 
     print("failed to get cell") 
     return UICollectionViewCell() 
     } 
    switch indexPath.section { 
     case 0: cell.imageView.image = UIImage(named: numberImageFiles[indexPath.row]) 
     case 1: cell.imageView.image = UIImage(named: specialNumberImageFiles[indexPath.row]) 
     default: break 
     } 
    return cell 
} 
+0

К сожалению, с использованием предлагаемого кода он все еще находится в режиме ожидания, что означает, что ячейки ниже строки прокрутки не отображаются как заштрихованные. Поэтому, если у меня есть некоторые ячейки, которые затенены во время выполнения, пользователь прокручивается вниз и выполняет резервное копирование, ячейки, которые были затенены, теперь больше не затушевываются, так как ячейки были удалены и повторно созданы. – Flip

Смежные вопросы