web-dev-qa-db-fra.com

Rapide. Changer la couleur du libellé de la table Tableview lorsque cette option est sélectionnée

J'ai une cellule personnalisée Tableview dans Swift et une étiquette dans cette cellule.

Je veux pouvoir modifier l'étiquette lorsque vous sélectionnez une cellule.

Comment faire pour référencer mon étiquette UITableviewCell personnalisée dans didSelectRowAtIndexPath

Dans Objective C pour référencer ma cellule personnalisée dans didSelectRowAtIndexPath, j'utiliserais les éléments suivants:

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

Que dois-je faire dans Swift pour obtenir le même résultat?

9
user3110353

Il vous suffit de traduire le même code en Swift. 

var myCell = tableView.cellForRowAtIndexPath(indexPath) as! MPSurveyTableViewCell
myCell.customLabel.textColor = UIColor.redColor()
11
S Shahid

Les réponses ci-dessus sont incomplètes

Dans la mesure où UITableView réutilise les cellules, vous devez vérifier si elles sont sélectionnées et ajuster la couleur de manière appropriée dans cellForRowAtIndexPath. Il peut y avoir des fautes de frappe, mais voici la réponse complète:

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)

}
5
Water Not Words

Swift 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 // for text color
    Cell?.backgroundColor = UIColor.red // for cell background color
}
3
Safad Funy

Essaye ça,

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

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

pourquoi ne pas utiliser setSelected dans la sous-classe UITableViewCell?

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

ou si vous souhaitez revenir à la couleur désélectionnée après un laps de temps déterminé: 

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

Ensuite, définissez simplement votre cellule selectionStyle = .none

2
JustinM
let CellObject = tableView.dequeueReusableCell(withIdentifier: "your cell identifier name") as! MPSurveyTableViewCell
CellObject.customLabel.textColor = UIColor.red
0
Prasann