2016-10-16 18 views
2

У меня есть UITableView Controller в моем проекте. Так что я сделал установку UITableViewCell, как здесь:Настройки фона UITableViewCell сбрасываются при прокрутке

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 

    cell.textLabel?.text = "Section: \(indexPath.section). Row: \(indexPath.row)." 

    if indexPath.row % 2 == 1 { 
     cell.backgroundColor = UIColor.gray 
    } 

    return cell 
} 

Я хочу клетка моего Tableview, чтобы быть серой, если их индекс не делится на 2.

Когда TableView появляется, все отлично! Но когда я просматриваю вверх и вниз, ячейки начинают менять цвета до серого.

Так что в конце все мои клетки серые.

Вот некоторые изображения:

before

after

ответ

3

Попытка добавить else заявление, так как клетки повторно.

else { 
    cell.backgroundColor = UIColor.white 
} 
+0

Спасибо большое) Это было так легко!): D –

+0

@AlexVihlayev Нет проблем мат. :) –

0

Поскольку TableView повторно клетки

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 

cell.textLabel?.text = "Section: \(indexPath.section). Row: \(indexPath.row)." 

if indexPath.row % 2 == 1 { 
    cell.backgroundColor = UIColor.gray 
}else{ 
    cell.backgroundColor = YOUR_COLOR 
} 
return cell 

}

Edit: Геллерт Ли ответил, что первый и довольно простой

2

Проблема заключается в том, что вы никогда не установить фон обратно на белый. Поскольку ячейки повторно используются, в какой-то момент вы устанавливаете серый для всех из них. Вместо этого вы должны проверить индекс строки каждый раз, когда клетка повторно:

cell.backgroundColor = indexPath.row % 2 == 0 ? UIColor.white : UIColor.gray 
Смежные вопросы