Как удалить рейтинги звезд в ячейке tableview?

#ios #swift

#iOS #swift

Вопрос:

Я извлекаю totalRaters и totalRatings из серверной части. Я делю последнее на первое, чтобы определить, сколько звезд я должен показать. Это всегда будет число от 0 до 5 включительно.

Мой код оценки звезд в подклассе UITableViewCell является:

 fileprivate let starStack : UIStackView = {
        let stackView = UIStackView()
        stackView.axis = .horizontal
        stackView.alignment = .fill
        stackView.distribution = .fillEqually
        stackView.spacing = 4
        return stackView
    }()

func setupStar() {
        //... code to add a label
        backgroundView.addSubview(starStack)
        starStack.translatesAutoresizingMaskIntoConstraints = false
        starStack.topAnchor.constraint(equalTo: label.bottomAnchor, constant: 8).isActive = true
        starStack.leadingAnchor.constraint(equalTo: backgroundView.leadingAnchor, constant: 8).isActive = true
        starStack.bottomAnchor.constraint(equalTo: backgroundView.bottomAnchor, constant: -8).isActive = true
        starStack.heightAnchor.constraint(equalToConstant: 34).isActive = true
}

func setValues(totalRatings Int, totalRaters Int) {
        let ratings = totalRatings / totalRaters
        if ratings > 0 {
            for index in 0...ratings - 1 {
                arrayStar[index].image = UIImage(named: "icon_starred")
            }
        }
}
  

Проблема в том, что всякий раз, когда я прокручиваю вниз (т. Е. Ячейка исчезает под портом просмотра), а затем делаю резервную копию, звездочки продолжают складываться, пока не будут заполнены все 5 звездочек. Это происходит для всех ячеек табличного представления. Я не уверен, что я делаю не так. Я добавил изображения, чтобы указать на проблему ниже. (Они были загружены в обратном порядке)

введите описание изображения здесьвведите описание изображения здесь

Ответ №1:

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

Вы должны добавить метод prepareForReuse в свой класс ячеек table view и очистить массив изображений. Что-то вроде:

 override func prepareForReuse() {
    super.prepareForReuse()
    arrayStar = [UIImage](count: 5, repeatedValue: UIImage(named: "icon_not_starred"))
}