2015-07-09 7 views
15

Próbuję zaimplementować niestandardowy styl wyboru dla moich komórek w UICollectionView. Nawet jeśli łatwo jest to zrobić ręcznie w metodach didSelect i didDeSelect, chciałbym to osiągnąć, manipulując "wybraną" zmienną w UICollectionViewCell.Próba zastąpienia "zaznaczone" w UICollectionViewCell Swift dla niestandardowego stanu wyboru

Mam ten kod do niego:

override var selected: Bool { 
    get { 
     return super.selected 
    } 
    set { 
     if newValue { 
      self.imageView.alpha = 0.5 
      println("selected") 
     } else if newValue == false { 
      self.imageView.alpha = 1.0 
      println("deselected") 
     } 
    } 
} 

Teraz, kiedy wybrać komórkę, komórka zostanie podświetlony, ale „wybrany” zostanie wydrukowane dwa razy i cofnięcie nie działa (choć obie metody UICollectionView są zaimplementowane).

Co mam zrobić? Dzięki!

+0

Czy próbowałeś oddanie punkt przerwania i śledzenie, gdy pierwszy "wybrany" dostanie? – quantumpotato

+0

Dzięki. Pomógł mi rozwiązać problem. super.selected nie był modyfikowany – Julius

Odpowiedz

21

I Swift 3.0:

override var isSelected: Bool { 
    didSet { 
     alpha = isSelected ? 0.5 : 1.0 
    } 
} 
+0

Ten powinien być wybrany jako odpowiedź, ponieważ odpowiada on najnowszej wersji iOS i używa tylko 'didSet' . – tomas789

22

Zorientowałem się, wkraczając do kodu. Problem polegał na tym, że super.selected nie był modyfikowany. Więc zmieniłem kod na:

override var selected: Bool { 
    get { 
     return super.selected 
    } 
    set { 
     if newValue { 
      super.selected = true 
      self.imageView.alpha = 0.5 
      println("selected") 
     } else if newValue == false { 
      super.selected = false 
      self.imageView.alpha = 1.0 
      println("deselected") 
     } 
    } 
} 

Teraz działa.

+1

Cieszę się, że działa! Powinieneś być w stanie oznaczyć swoją odpowiedź jako poprawną, wkrótce – quantumpotato

+0

super .. !! pomogło to (Y) i kciuki w górę za odpowiedź na własne pytanie –

+0

Może dodać aktualizację do Swift 3. Wybrany nie jest "isSelected" – Starlord

13

Wypróbuj tę.

override var selected: Bool { 
    didSet { 
     self.alpha = self.selected ? 0.5 : 1.0 
    } 
} 
Powiązane problemy