2015-07-09 7 views
15

Sto cercando di implementare uno stile di selezione personalizzato per le mie celle in un UICollectionView. Anche se è facilmente possibile farlo manualmente nei metodi didSelect e didDeSelect, mi piacerebbe ottenere questo risultato manipolando la variabile "selezionata" in UICollectionViewCell.Tentativo di ignorare "selezionato" in UICollectionViewCell Swift per lo stato di selezione personalizzata

Ho questo codice per esso:

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

Ora, quando seleziono una cellula, la cellula viene evidenziato, ma "selezionato" viene stampato due volte e la disattivazione non funziona (anche se entrambi i metodi UICollectionView sono implementato).

Come dovrei fare questo? Grazie!

+0

Avete provato a mettere un punto di interruzione e tracciando quando il primo "selezionato" viene colpita? – quantumpotato

+0

Grazie. Mi ha aiutato a risolvere il problema super.selected non è stato modificato – Julius

risposta

21

E per Swift 3.0:

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

Questo dovrebbe essere selezionato come risposta perché corrisponde alla più recente versione di iOS e utilizza solo 'didSet' . – tomas789

22

Calcolato tramite passaggio nel codice. Il problema era che il super.selezionato non veniva modificato. Così ho cambiato il codice a questo:

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

Ora funziona.

+1

Contento che funzioni! Dovresti essere in grado di contrassegnare la tua risposta come corretta presto – quantumpotato

+0

fantastico .. !! aiutato questo (Y) e il pollice in alto per rispondere alla propria domanda –

+0

Forse aggiungere un aggiornamento a Swift 3. selezionato non è "isSelected" – Starlord

13

Prova questo.

override var selected: Bool { 
    didSet { 
     self.alpha = self.selected ? 0.5 : 1.0 
    } 
}