Изменение цвета текста нескольких выделенных ячеек табличного представления в UITableView - PullRequest
0 голосов
/ 18 января 2019

У меня есть табличное представление с 8 ячейками. Каждый содержит ярлык. Для последних 4 ячеек я хочу, чтобы свойство текста метки было синего цвета. Для первых четырех ячеек я хочу, чтобы они были черного цвета.

Я установил синий цвет текста в cellForRowAt indexPath со следующим кодом:

if indexPath.row > 4 {
    cell.label.textColor = UIColor.blue
}

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

Как я могу решить это? Спасибо.

Ответы [ 5 ]

0 голосов
/ 18 января 2019

Это потому, что действительно ячейка используется повторно.

Обязательно используйте условие else каждый раз в UITableView и UICollectionView, чтобы значение не менялось во время scroall.

Вот 2 метода, которым вы можете следовать, чтобы цвет не менялся.

cell.label.textColor = indexPath.row > 4 ? .blue : .black

OR

if indexPath.row > 4 {
    cell.label.textColor = UIColor.blue
}
else {
    cell.label.textColor = UIColor.black
}
0 голосов
/ 18 января 2019

Вам потребуется добавить еще одну часть в ваш метод cellForRow, поскольку проблема с удалением из очереди или проблема повторного использования ячейки.

cell.label.textColor = indexPath.row > 4 ? .blue : .black

Примечание: всегда не забывайте добавлять else деталь в метод cellForRow, в противном случае он ведет себя странно.

0 голосов
/ 18 января 2019

Это потому, что действительно ячейка используется повторно. Чтобы решить это, вам нужна логика, что делать с ячейками / строками, не удовлетворяющими вашему условию indexPath.row > 4. :)

0 голосов
/ 18 января 2019

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

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

Итак, ваш код должен выглядеть примерно так:

if indexPath.row > numberOfRows - 4 {
    cell.label.textColor = .blue
} else {
    cell.label.textColor = .black
}

Или, как уже упоминалось @jarvis, вы можете использовать троичный оператор, чтобы сделать ваш код более компактным, например:

cell.label.textColor = indexPath.row > numberOfRows - 4 ? .blue : .black

numberOfRows - количество строк в табличном представлении.

0 голосов
/ 18 января 2019

Вам нужно также установить другое условие, чтобы оно не изменилось

if indexPath.row > 4 {
    cell.label.textColor = UIColor.blue
}
else {
    cell.label.textColor = UIColor.black
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...