Содержимое таблицы просматривается при прокрутке Swift

80
9

Я создал табличное представление с ячейками таблицы в нем. Я могу перечислить содержимое в разных строках табличного представления (я перечисляю песни с устройства в строках tableview). Ниже приведен фрагмент кода для этого.

override func tableView( tableView: UITableView, cellForRowAtIndexPath indexPath:NSIndexPath ) -> UITableViewCell {

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! hostTableViewCell //hostTableViewCell is the custom cell class

cell.backgroundColor = UIColor.clearColor()

print("\(songList[indexPath.section + StaticThing.timesCalled].songTitle)")

cell.clientCellLabel!.text = songList[indexPath.section + StaticThing.timesCalled].songTitle

copyOfAllSongsArray.append(songList[indexPath.section + StaticThing.timesCalled].songTitle) // Taking text of the cells in an array

cell.detailTextLabel!.text = "\(songList[indexPath.section + StaticThing.timesCalled].artistName)"

StaticThing.doSomething()

if (StaticThing.timesCalled == songList.count){

StaticThing.timesCalled = 0

}

return cell;

}

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

спросил(а) 2016-05-04T13:29:00+03:00 4 года, 4 месяца назад
1
Решение
106

Ваш код не имеет смысла. Вы используете переменные timesCalled для индексации в ваш массив данных? Порядок, в котором система получает ячейки в cellForRowAtIndexPath, не гарантируется. Вам нужно использовать номера разделов и строк, переданные вам в indexPath, чтобы выяснить, какой элемент вернуть, а не использовать количество раз, когда метод вызывается.

Логика для cellForRowAtIndexPath должна быть переделана. Это совершенно неправильно.

ответил(а) 2016-05-04T14:10:00+03:00 4 года, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема