Проблема с повторяющимся содержимым UITableViewCells

Мое приложение показывает отправления местных автобусов пользователя, однако, когда ночные автобусы начинают показывать красные буквы «N» в других службах после прокрутки, как показано на снимках экрана ниже, кроме того, номера маршрутов начинают быть неправильными. В остальное время при прокрутке номера маршрутов правильные, это только когда появляются ночные автобусы

После открытия приложения

Ночные автобусы внизу таблицы

Прокрутка резервной копии приложения

Это код, который я выполнил для установки номера маршрута

case "N3", "N7", "N11","N16","N22","N25","N26","N30","N31","N34", "N37","N44","N98", "N106","N113","N124":

var route = NSMutableAttributedString()

route = NSMutableAttributedString(string: departureRoutes[0].rawString()!)

route.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red, range: NSRange(location:0,length:1))

route.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.white, range: NSRange(location:1,length:(departureRoutes[0].string?.count)! - 1))

cell.route.setAttributedTitle(route, for: .normal)       

default : 

cell.route.tintColor = routeColor(routeno: departureRoutes[0].rawString()!)

person Alex    schedule 03.08.2018    source источник
comment
Ячейки табличного представления используются повторно. Задайте только значения элемента пользовательского интерфейса ячейки в «cellForRowAtIndexPath» и не забудьте установить значения всех элементов пользовательского интерфейса, чтобы значения не переносились из одной ячейки в другую.   -  person FryAnEgg    schedule 03.08.2018
comment
@FryAnEgg Этот код запускается в cellForRowAt indexPath   -  person Alex    schedule 03.08.2018
comment
Как упоминалось в @FryAnEgg, вам нужно каждый раз устанавливать каждое представление в ячейке. Все, что вы не установили из-за условного кода, останется прежним, когда ячейка будет повторно использоваться при прокрутке пользователем.   -  person Chris    schedule 03.08.2018
comment
Я вижу только одну атрибутированную строку и один цвет зубца. Вы всегда можете пройти через cellForRow, чтобы отслеживать, какие данные поступают в ваши ячейки.   -  person FryAnEgg    schedule 03.08.2018
comment
Классическая ошибка :-) Не могли бы вы предоставить всю функцию cellForRow и хорошо отформатированный код?   -  person Alexander Yakovlev    schedule 04.08.2018
comment
Поскольку он показывает, что маршрут - это UIButton, и я думаю, что вы иногда устанавливаете заголовок и другие, которые вы устанавливаете attributtedTitle, вы должны сбросить как заголовок, так и attributtedTitle пустыми строками, прежде чем устанавливать значения   -  person Mohamed Mostafa    schedule 04.08.2018


Ответы (1)


Решение, предложенное Мохамедом Мостафой в комментариях, заключалось в том, чтобы сбросить значение UIButton и снова установить значение, используя

cell.route.setAttributedTitle(NSMutableAttributedString(string: "\(departureRoutes[indexPath.row + 1])"), for: .normal)

Затем выполните код переключения после этого

person Alex    schedule 04.08.2018