TableView очищается при взаимодействии - PullRequest
0 голосов
/ 21 февраля 2020

Итак, у меня есть 2 вида, которые отображаются внутри UIView, в зависимости от того, что выбрано в SegmentViewController. Я создаю фиктивные данные, возвращая 20 строк пользовательской ячейки. Это прекрасно работает.

Все хорошо, пока я не взаимодействую с TableView.

Content is gone

Ниже - мой код:

GoalsViewController.swift

import UIKit

class GoalsViewController: UIViewController {

    @IBOutlet weak var goalsTableView: UITableView!
    let goalCellIdentifier = "goalCell"


    override func viewDidLoad() {
        super.viewDidLoad()

        goalsTableView.delegate = self
        goalsTableView.dataSource = self

        goalsTableView.register(UINib(nibName: "GoalsViewCell", bundle: nil), forCellReuseIdentifier: goalCellIdentifier)

        goalsTableView.reloadData()
    }


}

extension GoalsViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 20
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = goalsTableView.dequeueReusableCell(withIdentifier: goalCellIdentifier, for: indexPath) as! GoalsViewCell
        cell.goalTitle.text = "aaaaa"
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("Selected \(indexPath.row)")
    }

   }

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

В чем может быть причина пустого просмотра таблицы?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2020

Я объясню, в чем заключалась проблема для людей, которые, вероятно, не знали (таких как я). Так что мой UITableView находится внутри UIView, который изменяется в зависимости от того, что выбирает пользователь. Всего у меня было 2 разных вида, которые куда переключались. Причиной его опустошения было то, что мой родительский ViewController не смог получить доступ к делегату для UITableView. Чтобы это исправить, после добавления подпредставления в UIView вам также необходимо переместить ViewController в родительский контроллер. В коде это выглядит так:

// Empty array of UIViewControllers
var views: [UIViewController]!

// Add the UIViewControllers to the array
views = [UIViewController()]
views.append(EventsViewController())
views.append(GoalsViewController())

for view in views {
      // Needed to adjust the size of Subview to size of View
      view.view.frame = containerView.bounds
      // Add the subviews
      containerView.addSubview(view.view)
}

// Bring the view in position 1 to the front of the UIView
containerView.bringSubviewToFront(views[1].view)
// Add Views[1] UIViewController as a child to the parent controller
self.addChild(views[1])
views[1].didMove(toParent: self)

// After done with everything with the UIViewController remove it
views[1].removeFromParent()

0 голосов
/ 21 февраля 2020

Я могу ошибаться, но я заметил одну вещь: вы не реализуете функцию, которая устанавливает высоту каждой ячейки.

// Specify the height of your cells
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
   return 100 // Or your given cell height.
}

Так вот моя теория: если вы при использовании ограничений чего-то не хватает, и высоту вашей ячейки нельзя определить только с помощью ограничений, либо вы вообще не используете ограничений, поэтому вы должны использовать функцию heightForRowAt , чтобы указать высоту каждой ячейки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...