2015-06-24 29 views
8

Ich habe eine benutzerdefinierte Tableview Zelle in swift und in dieser Zelle eine Bezeichnung.Schnell. Ändern der Farbe der benutzerdefinierten Tabellenansicht Zellenbezeichnung, wenn ausgewählt

Ich möchte in der Lage sein, die Bezeichnung zu ändern, wenn Sie eine Zelle auswählen.

Wie kann ich meine benutzerdefinierte UITableviewCell Label Referenz in didSelectRowAtIndexPath

In Objective C meiner benutzerdefinierten Zelle in didSelectRowAtIndexPath verweisen würde ich folgendes verwenden:

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

Was muss ich in schnellen tun, um zu erreichen, die Das gleiche Ergebnis?

Antwort

10

Sie müssen nur den gleichen Code in Swift übersetzen.

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

durch diese Lösung, wenn ich klickte auf viele Zellen, alle Zellen sind rot? oder nur die ausgewählte wird rot, und die anderen werden auf die essentielle Farbe zurück? – Rawan

+0

Ich denke, alle ausgewählten Zellen werden rot, aber wenn Sie Zellen wiederverwenden, wird inkonsistentes Verhalten angezeigt. –

+0

danke :) aber tun Sie jetzt, wie man die anderen Zellen die essentielle Farbe nehmen lässt? Wirklich alle ausgewählten Zellen sind rot und haben nach Auswahl anderer Zellen nicht auf die essentielle Farbe zurückgeschaltet: S – Rawan

2

die Sie interessieren,

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

Die oben genannten Antworten sind

unvollständig, weil ein UITableView Zellen wiederverwendet Sie benötigen werden, wenn die Zellen ausgewählt zu überprüfen und die Farbe entsprechend in cellForRowAtIndexPath einzustellen. Es kann Tippfehler sein, aber dies ist die vollständige Antwort:

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

Ich habe diesen Code für eine Sammlungsansicht ausprobiert. wenn ich eine Zelle anwähle, wird sie ausgewählt und dann automatisch abgewählt !! so kann ich die Etikettfarbe zweimal ändern sehen! –

+0

Sie müssen Code schreiben, wenn Sie Hilfe benötigen. Der Code in dieser Antwort deaktiviert die Zelle nicht. Wenn Sie eine neue Frage stellen, wird Ihnen jemand helfen. Wenn du mir eine Nachricht oder einen Link dazu in einem Kommentar schreibst, werde ich versuchen zu helfen. –

2

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

warum nicht in UITableViewCell Unterklasse setSelected verwenden?

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

oder wenn Sie es wollen zurück zu abgewählten Farbe nach einer bestimmten Zeit zu gehen:

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

Dann setzen Sie einfach Ihr Handy selectionStyle = .none

Verwandte Themen