2014-12-28 20 views
7

Tarihi kaydırmak için yatay koleksiyon görünümü kullanıyorum. Koleksiyon görünümünde 30 hücre bulunur. Seçimi belirtmek için ilk hücreyi seçtiğimde, hücre arka plan rengi, varsayılan renk kırmızısından kahverengi olarak değişti. Daha sonra başka bir hücre seçersem, seçilen hücre rengi kırmızıdan kahverengiye dönüştü. Ama ilk hücre BGColor aynı kalır (kahverengi). Diğer hücreyi tıklatarak varsayılan rengi nasıl değiştirebilirim?Swift'de UICollectionView içinde hücre arka plan rengini değiştirme

 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() 
     } 

    } 

cevap

1

Sen son seçilen endeks yolunun bir kopyasını tutmak olabilir ve onlar farklı ise o zaman didSelectItemAtIndexPath endeks yolları karşılaştırmak senin görmek. Farklıysa, gerektiğinde bu dizin yollarındaki iki hücrenin renklerini değiştirin ve ardından eskideki yeni dizin yolunu kopyalayın. Yine bu düşünmek


Düzenleme

, bu hücrelerin backgroundView ve selectedBackgroundView özellikleri ile yapılmalıdır. Bir hücreyi deşarj ettikten sonra, iOS'un değişime müdahale etmesini sağlamak için aşağıdakileri yapabilirsiniz.

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

Teşekkürler Andrew! Ama eski ve yeni Indexpath'i nasıl koruyabilirim? –

+1

@ McDonal_11 'cell.selectedBackgroundView.backgroundColor' kullandığımda sınıf üyesi değişkenleri –

+0

kullanın hata 'ölümcül hata: bir isteğe bağlı değer' unwrapping sırasında beklenmedik sıfır bulundu. Hücre zaten varsa bu görünümü ilk oluşturmalı mıyım? – zillaofthegods

13

Bu o zaman sadece arka plan rengini daha sonra


Ve değiştirin seçilen UICollectionViewCell için sabit yaratır 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) 
} 

parametreyle işlev collectionView kullanabilirsiniz seçimi kaldırıldığında orijinal renge geri dönün, collectionView fonksiyonunu parametreyle birlikte kullanmalısınız er didDeselectItemAtIndexPath

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

Ve orijinal birine rengini değiştirmek! Burada Örneğin


deli etsin bir 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() 
} 

bu koddan ekran görüntüsü, Ama bu benim için çalışıyor ...!

İlgili konular