2016-07-20 10 views
4

Ich mache eine App, die farbige Tabellenansichtszellen verwendet, um andere Zellen in Kategorien zu trennen. Ich tue das, indem ich die Zellen unter Verwendung von if else-Anweisungen mit anderen Farben färbt. Aber aus irgendeinem Grund, wenn ich die App starte, je mehr ich in der Tischansicht nach oben und unten scrolle, desto mehr ändern sich auch die anderen Zellen zufällig. Dies ist der Code in meiner benutzerdefinierten instrumentTableCell Klasse:Tabellenansicht Zellen, die Farben beim Scrollen ändern Swift

@IBOutlet var nameLabel: UILabel? 
@IBOutlet var descriptionLabel: UILabel? 
@IBOutlet var thumbnailImage: UIImageView! 

func configurateTheCell(recipie: Recipie) { 
    self.nameLabel?.text = recipie.name 
    self.descriptionLabel?.text = recipie.description 
    self.thumbnailImage?.image = UIImage(named: recipie.thumbnails) 
    if nameLabel!.text == "Instrument" 
    { 
     backgroundColor = UIColor.orangeColor() 
     nameLabel?.textColor = UIColor.blackColor() 
    } 
    else if nameLabel!.text == "Optional addon" 
    { 
     backgroundColor = UIColor.cyanColor() 
    } 

} 
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if nameLabel!.text == "Instrument" 
    { 
     return 20 
    } 
    else if nameLabel!.text == "Optional addon" 
    { 
     return 20 
    } 
    else 
    { 
     return 100 
    } 


} 

und das ist, was die App sieht aus wie nach dem Abwurf: when the app is launched

vs. wenn der Benutzer um ein wenig verschoben hat: after scrolled around

auch wenn jemand weiß wie, ich möchte die farbigen Zellen auch kleiner sein, so dass die App sieht schöner aus.

+0

zeigen uns den Inhalt der 'cellForRowAtIndexPath festlegen:' Methode – arturdev

+3

Es ist, weil celles wiederverwendet werden. Um nach 'else if nameLabel! .text ==" Optionales Addon "{backgroundColor = UIColor.cyanColor()}' do 'else {backgroundColor = UIColor.clearColor()} '(oder whiteColor()) – Larme

+0

@Larmee danke das hat funktioniert ! – zach2161

Antwort

2

Sie in cellForRowAtIndexPath Delegatmethode

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

    let cell = tableView.dequeueReusableCellWithIdentifier("your identifier", forIndexPath: indexPath) 
    if cell.recipie.name == "Instrument" 
    { 
     backgroundColor = UIColor.orangeColor() 
     nameLabel?.textColor = UIColor.blackColor() 
    } 
    else if cell.recipie.name == "Optional addon" 
    { 
     backgroundColor = UIColor.cyanColor() 
    } 
    else{ 
    backgroundColor = UIColor.whiteColor() 
    } 
    return cell 
} 
Verwandte Themen