2015-02-28 2 views
1

У меня проблема с выбранными элементами в виде коллекции.Swift - выбор элемента в виде коллекции

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

мой код выглядит следующим образом:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
 
    var cell = collectionView.cellForItemAtIndexPath(indexPath) as UICollectionViewCell? 
 
    cell?.contentView.backgroundColor = UIColor.blueColor() 
 

 
func collectionView(collectionView: UICollectionView, didDeslectItemAtIndexPath indexPath: NSIndexPath) { 
 
    var cell = collectionView.cellForItemAtIndexPath(indexPath) as UICollectionViewCell? 
 
    cell?.contentView.backgroundColor = UIColor.blackColor() 
 
} 
 

 
func collectionView(collectionView: UIControllerView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
 
    let cell: boxCell = collectionView.dequeueReusableCellWithReuseIdentifier("demoCell", forIndexPath: indexPath) as boxCell 
 

 
    cell.cellTitle.text = name[indexPath.row] 
 
}

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

Я использую горизонтальное направление прокрутки только с 1 строкой и 4 ячейками в строке.

Где я ошибся? У кого-нибудь еще была эта проблема?

ответ

0

Это нормальное поведение - причина в том, что элементы повторно используются, и после повторного использования они проходят через cellForItemAtIndexPath, где вы не устанавливаете цвет фона, поэтому они сохраняют последний, который вы когда-либо устанавливали, - в вашем случае метод didSelect.

Вы должны создать NSSet, где вы будете сохранять все выбранные NSIndexPath и добавлять/удалять NSIndexPath при выборе/снятии выделения.

Установка цветовой логики фона должна быть выполнена в cellForItemAtIndexPath - после того, как вы проверили, существует ли NSIndexPath в вашем NSSet, вы задали желаемый цвет.

При выборе вам необходимо будет также перезагрузить определенный элемент, поэтому он назовет cellForItemAtIndexPath за тот, который вы нажали.

+0

Спасибо! :) Я дам ему попробовать – Bill

+0

Немного напоминания: если вы используете swift 1.2, используйте собственный тип Set вместо NSSet – mustafa

0

Используйте метод подготовки к Resue в своем классе ячейки. Он будет работать нормально.

override func prepareForReuse() 
{ 
     self.backgroundColor = UIColor.lightGrayColor() 
} 
Смежные вопросы