2014-12-28 2 views
7

Я использую горизонтальный просмотр коллекции для прокрутки дат. Вид коллекции содержит 30 ячеек. Если я выберу первую ячейку, чтобы указать выделение, цвет фона ячейки изменился до коричневого цвета по умолчанию красного цвета. Затем, если я выберу другую ячейку, выбранный цвет ячейки изменился на коричневый с красного. Но первая ячейка BGColor остается той же (коричневой). Как я могу изменить цвет по умолчанию, нажав другую ячейку?Изменение цвета фона ячейки в UICollectionView в Swift

 func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath 
    indexPath: NSIndexPath) -> UICollectionViewCell { 

    var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", 
    forIndexPath: indexPath) as myViewCell 

    cell.date_label.text = arr_date[indexPath.item] 

    } 

     func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath 
     indexPath: NSIndexPath) { 

     var cell = collectionView.cellForItemAtIndexPath(indexPath) as myViewCell 

     if(cell.selected) 
     { 
      cell.backgroundColor = UIColor.brownColor() 

     } 
     else 
     { 
      cell.backgroundColor = UIColor.redColor() 
     } 

    } 

ответ

1

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


Редактировать

снова Думая об этом, то это должно быть сделано с backgroundView и selectedBackgroundView свойств клеток. После того, как вы деактивируете ячейку, вы можете сделать следующее, чтобы позволить iOS обрабатывать изменения.

cell.backgroundView.backgroundColor = [UIColor redColor]; 
cell.selectedBackgroundView.backgroundColor = [UIColor brownColor]; 
+0

Спасибо, Андрей! Но как я могу сохранить старый и новый Indexpath? –

+1

@ McDonal_11 использовать переменные класса класса –

+0

когда я использовал 'cell.selectedBackgroundView.backgroundColor', я получаю ошибку' фатальная ошибка: неожиданно найден nil при распаковке необязательного значения'. Нужно ли сначала создавать это представление, если ячейка уже существует? – zillaofthegods

13

Вы можете использовать функцию collectionView с параметром didSelectItemAtIndexPath

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath 
    indexPath: NSIndexPath) { 

     let selectedCell:UICollectionViewCell = myCollectionView.cellForItemAtIndexPath(indexPath)! 
     selectedCell.contentView.backgroundColor = UIColor(red: 102/256, green: 255/256, blue: 255/256, alpha: 0.66) 
} 

Это создает постоянный для выбранного UICollectionViewCell, то вы просто изменить цвет фона в


а затем вернуться к исходному цвету, когда он не выбран, вы должны использовать функцию collectionView с параметром эр didDeselectItemAtIndexPath

func collectionView(collectionView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) { 
     let cellToDeselect:UICollectionViewCell = myCollectionView.cellForItemAtIndexPath(indexPath)! 
     cellToDeselect.contentView.backgroundColor = UIColor.clearColor() 
} 

И вы измените цвет на оригинал!


Например вот скриншот из этого кода в filterApp

UICollectionView example

2
var selectedIndex = Int() 

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

    if selectedIndex == indexPath.row 
    { 
     cell.backgroundColor = UIColor.green 
    } 
    else 
    { 
     cell.backgroundColor = UIColor.red 
    } 

    return cell 
} 

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
{ 
    selectedIndex = indexPath.row 

    self.yourCollctionView.reloadData() 
} 

Может быть сумасшедшим, но он отлично работает для меня ...!

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