2016-07-20 4 views
4

Я создаю приложение, которое использует цветные таблицы для просмотра разделов других ячеек по категориям. Я делаю это, окрашивая ячейки разными цветами, используя инструкции if else. Но по какой-то причине, когда я запускаю приложение, чем больше я просматриваю вверх и вниз по представлению таблицы, тем больше других ячеек случайно меняет цвет. Это код в моем пользовательском классе instrumentTableCell:Таблица View Ячейки, меняющие цвета при прокрутке 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 
    } 


} 

и это то, что приложение выглядит как при запуске: when the app is launched

VS., когда пользователь прокручиваются вокруг немного: after scrolled around

также, если кто-то знает, как, я хотел бы, чтобы цветные ячейки также были меньше, чтобы приложение выглядело лучше.

+0

показать нам содержимое '' cellForRowAtIndexPath: метод – arturdev

+3

Это потому, что Сель повторно используются. Чтобы после 'else if nameLabel! .text ==" Необязательный аддон "{backgroundColor = UIColor.cyanColor()}' do 'else {backgroundColor = UIColor.clearColor()}' (или whiteColor()) – Larme

+0

@ Larme благодарит за то, что сработало ! – zach2161

ответ

2

Вы можете установить в cellForRowAtIndexPath метод делегата

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 
} 
Смежные вопросы