Вступить в клуб →
лёгкаявопросUIKit и SwiftUI: экраны и состояние

При скролле ленты у части ячеек остаётся чужая плашка «Скидка»

func tableView(_ tv: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tv.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) as! ItemCell
    let item = items[indexPath.row]

    cell.titleLabel.text = item.title
    if item.hasDiscount {
        cell.badgeView.isHidden = false
    }

    return cell
}

При скролле плашка «Скидка» появляется у товаров без скидки. Название при этом всегда верное. Почему?

  • Ячейки переиспользуются, а плашка настраивается только в одной ветке условия
  • dequeueReusableCell(withIdentifier:for:) возвращает одну и ту же ячейку для всех строк, нужен вариант без indexPath
  • Таблица не перерисовывается при скролле, поэтому после подгрузки данных нужно звать reloadData
  • Приведение через as! ломает связь ячейки с моделью, из-за чего часть свойств берётся от соседней строки

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела