2015-06-24 14 views
8

Ho una cella personalizzata Tableview in rapido e in quella cella un'etichetta.Swift. Cambia colore dell'etichetta cella personalizzata Tableview quando selezionato

Desidero poter modificare l'etichetta quando si seleziona una cella.

Come posso riferire la mia etichetta personalizzata UITableviewCell in didSelectRowAtIndexPath

In Objective C per fare riferimento mia cella personalizzato in didSelectRowAtIndexPath vorrei utilizzare il seguente:

MPSurveyTableViewCell *cell = (MPSurveyTableViewCell *)[tableViewcellForRowAtIndexPath:indexPath]; 
cell.customLabel.TextColor = [UIColor redColor]; 

Cosa devo fare in rapida per raggiungere il stesso risultato?

risposta

10

Hai solo bisogno di tradurre lo stesso codice in Swift.

var myCell = tableView.cellForRowAtIndexPath(indexPath) as! MPSurveyTableViewCell 
myCell.customLabel.textColor = UIColor.redColor() 
+0

da questa soluzione, se io cliccato su molte celle, tutte le celle saranno rosse? o solo quello selezionato sarà rosso, e gli altri torneranno al colore essenziale? – Rawan

+0

Penso che tutte le celle selezionate saranno rosse, ma se riutilizzate le celle, apparirà un comportamento incoerente. –

+0

grazie :) ma come si fa a fare in modo che le altre celle assumano il colore essenziale? In realtà tutte le celle selezionate sono rosse e non sono tornate al colore essenziale dopo aver selezionato altre celle: S – Rawan

2

Prova questo,

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    tableView.deselectRowAtIndexPath(indexPath, animated: true) 

    var Cell = tableView.cellForRowAtIndexPath(indexPath) as! MPSurveyTableViewCell 
    Cell. customLabel.textColor = UIColor. redColor() 
} 
3

risposte di cui sopra sono incompleti

Perché un UITableView riutilizza celle è necessario controllare se sono selezionate le cellule e regolare il colore in modo appropriato in cellForRowAtIndexPath. Ci possono essere errori di battitura, ma questo è la risposta completa:

func tableView(tableView: UICollectionView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifierHere", forIndexPath: indexPath) as! MPSurveyTableViewCell 

    // setup your cell normally 

    // then adjust the color for cells since they will be reused 
    if cell.selected { 
     cell.customLabel.textColor = UIColor.redColor() 
    } else { 
     // change color back to whatever it was 
     cell.customLabel.textColor = UIColor.blackColor() 
    } 

    return cell 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){ 
    let cell = tableView.cellForRowAtIndexPath(indexPath) as! MPSurveyTableViewCell 
    cell.customLabel.textColor = UIColor.redColor() 
    tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None) 

} 

func tableView(tableView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) { 
    let cell = tableView.cellForRowAtIndexPath(indexPath) as! MPSurveyTableViewCell 

    // change color back to whatever it was 
    cell.customLabel.textColor = UIColor.blackColor() 
    tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None) 

} 
+0

ho provato questo codice per una vista di raccolta; quando seleziono una cella, viene selezionata e quindi deselezionata automaticamente !! quindi posso vedere il colore dell'etichetta cambiare due volte! –

+0

Dovrai pubblicare il tuo codice se vuoi aiuto. Il codice in questa risposta non deseleziona la cella. Se fai una nuova domanda qualcuno ti aiuterà. Se mi mandi un messaggio o ti colleghi a un commento qui, cercherò di aiutarti. –

2

rapida 3 Xcode 8

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    tableView.deselectRow(at: indexPath, animated: true) 
    let Cell = tableView.cellForRow(at: indexPath) 
    Cell?.textLabel?.textColor = UIColor.red 
} 
2

perché non usare setSelected in UITableViewCell sottoclasse?

override func setSelected(_ selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 
    customLabel.textColor = selected ? UIColor.red : UIColor.black 
} 

o se si vuole tornare al colore deselezionata dopo un determinato periodo di tempo:

override func setSelected(_ selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 
    if selected { 
    customLabel.textColor = UIColor.red 
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.2, execute: { [weak self] in 
    self?.customLabel.textColor = UIColor.black 
    } 
    } 
} 

Poi basta impostare il selectionStyle cellulare = .none

Problemi correlati