Неправильное население Табличного Представления - PullRequest
0 голосов
/ 03 марта 2020

Bonjour! Проблема в том, что мне не удается заполнить мое табличное представление данными. Хотя в некотором смысле это правильно, я понял, что программа снова и снова ставит один взгляд на другой. Ниже я приведу фрагменты кода, которые определенно связаны с проблемой

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        if cell.isHidden == true {

            cell.isHidden.toggle()

        }
    }

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let record = records[indexPath.section][indexPath.row]

        let view = RecordView(price: record.price, place: record.place, time: record.date?.getDay(), category: record.category)

        let cell = tableView.dequeueReusableCell(withIdentifier: "RecordViewCell", for: indexPath) as! RecordViewCell

        cell.setRecordView(record: view)



        cell.clipsToBounds = true
        cell.contentView.backgroundColor = UIColor.clear
        cell.layer.backgroundColor = UIColor.clear.cgColor
        cell.backgroundColor = .clear

        return cell



    }

Кроме того,

class RecordViewCell: UITableViewCell {

    @IBOutlet weak var view: UIView!

    func setRecordView(record: RecordView) {

        view.addSubview(record)
        record.frame = CGRect(x: 5, y: 5, width: view.frame.width - 10, height: 60)

    }

    override func prepareForReuse() {
        super.prepareForReuse()
        self.isHidden = true
    }



}

Это ссылка на пи c о том, как таблица выглядит в общем. Там вы можете видеть, что тени перекрываются и ошибаются.

Заранее большое спасибо.

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

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

Однако, как быстрое решение, вы должны всегда удалять предыдущий вид:

@IBOutlet weak var view: UIView!

var record: RecordView? {
   didSet {
      oldValue?.removeFromSuperview()

      guard let record = record else { return } 

      view.addSubview(record)
      record.frame = CGRect(x: 5, y: 5, width: view.frame.width - 10, height: 60)
   }
}
0 голосов
/ 03 марта 2020

Из-за повторного использования ячеек, когда вы добавляете подпредставление в свою ячейку, это не новая ячейка каждый раз, иногда она повторно использует одну. В этом случае гораздо лучше иметь вид записи в качестве свойства ячейки и назначить новую запись этому свойству. В этом случае вы избежите нескольких подпредставлений здесь. Кроме того, я на самом деле не понимаю, почему вы прячете ячейку в prepareForReuse, это странное и ненужное поведение.

class RecordViewCell: UITableViewCell {

    @IBOutlet weak var recordView: RecordView!

    func setRecordView(record: RecordView) {

        recordView = record

    }
}
...