2015-12-28 3 views
0

У меня есть UITableView с пользовательским UITalbeCellView. Каждая ячейка имеет название тела и дату. Когда я извлекаю данные , некоторые из названий должны быть красными, поэтому существует Bool, для которого установлено значение true для тех ячеек, название которых должно быть красным.UITableView меняет вещи некоторых ячеек в Swift

В первый раз, когда данные извлекаются, все выглядит нормально, но при прокрутке вверх и вниз несколько раз все заголовки заканчиваются красным.

Im, используя массив структур для хранения данных и на cellForRowAtIndexPath есть если и если логическое в этой позиции массива верно ли я изменить цвет на красный:

let cell = tableView.dequeueReusableCellWithIdentifier("CommentsRowTVC", forIndexPath: indexPath) as! CommentsRowTVC 
let single_comment = self.AOS[indexPath.row] 

cell.titulo_comentario?.text = single_comment.titulo_comment 
if single_comment.flag == true { 
    cell.titulo_comentario.textColor = UIColor.redColor() 
} 

Im gessing он повторяет представления или что-то в этом роде. У этого есть легкое исправить? Или мне нужно реализовать собственный TableView для предотвращения этого? Я также думаю, что метод dequeueReusableCellWithIdentifier может быть причиной моей проблемы ... но Im new on swift и can not думаю о любой замене для этого.

Это происходит аналогично на кнопках, которые есть на ячейках, когда вы нажимаете кнопку из ячейки, она меняет свой цвет и отключает его, но только тот, который находится на этой ячейке. Однако при нажатии на ячейку также изменяются кнопки из других ячеек.

ответ

4

Поскольку ячейки используются повторно, вы попадаете в ячейки, которые ранее были красными, потому что они имели single_comment.flag == true и теперь используются для другой строки, где на самом деле есть single_comment.flag == false. Вы должны сбросить цвет в else ветви снова:

if single_comment.flag == true { 
    cell.titulo_comentario.textColor = UIColor.redColor() 
} else { 
    cell.titulo_comentario.textColor = UIColor.whiteColor() 
} 

UITableView s повторно использовать клетки, а это означает, что вы получите клетки внутри cellForRowAtIndexPath, которые ранее использовались ранее, возможно, уже установили textColor на красный. Теперь ваша задача - вернуть цвет текста в исходное состояние.

В общем, независимо от того, какое изменение вы внесете в if, необходимо, чтобы в ячейке else -branch была создана специальная настройка. Если вы удалите ярлык в if, добавьте его в else.

+0

который сработал отлично, спасибо. Однако, когда я меняю цвет кнопок Im, делаю это из функции, вызываемой из cell.myButton.addTarget. Как я могу отменить эти изменения? –

+0

@PabloDuque Я пытаюсь НИКОГДА не менять ячейку вне 'cellForRowAtIndexPath'. Я пытаюсь отразить все свойства, которые определяют отображение ячейки в пользовательской структуре данных, и всякий раз, когда ячейка нуждается в изменении, я изменяю соответствующее свойство в структуре данных и перезаряжаю строку или весь tableView. – luk2302

+0

Как я могу прочитать нажатие кнопки из 'cellForRowAtIndexPath' ?? –

Смежные вопросы