Как я могу отладить UITableView не отображая строки? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть viewcontroller

class PlacesVC: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    // MARK: - Table view data source
    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 4
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")
        cell.textLabel?.text = "Row \(indexPath.row)"

        return cell
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "toMap", sender: kill)
    }
}

У меня также есть идентификатор ячейки как Cell

enter image description here

КогдаЯ создаю и запускаю приложение, я получаю пустую таблицу

enter image description here

Я надеялся получить 4 строки, подобные этой.

enter image description here

Как можно было бы отладить, почему мои строки не отображаются?

Ответы [ 4 ]

0 голосов
/ 23 октября 2018

проверьте, что вы добавили tableView delegate и dataSource в свой код.

Зарегистрируйте класс (если вы используете пользовательский класс) для использования при создании новой таблицыклетки.В viewDidLoad() как:

tableView.register({your cell class}, forCellReuseIdentifier:"identifier")

инициализировать объект ячейки с помощью

tableView.dequeueReusableCell(WithIdentifier:,forIndexPath:)

На всякий случай, если вы неиспользуя любой класс для своей ячейки, вам не нужно регистрировать свой класс.Вы просто инициализируете объект ячейки:

tableView.dequeueReusable(CellWithIdentifier:)

0 голосов
/ 23 октября 2018

Прежде всего, убедитесь, что вы установили свойства delegate и dataSource tableView для экземпляра этого viewController (иначе эти методы не будут вызваны).(Вы можете пропустить этот шаг, если ваш ViewController унаследован от TableViewController).

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

    let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")

с:

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 

Третье: убедитесь, что вы установили правильный класс из IB.

И последнее: изменитестиль от "Custom" до "Basic", чтобы иметь значение по умолчанию textLabel.

0 голосов
/ 23 октября 2018

Вам нужно установить свой класс в разделе Identity Inspector вашего ViewController на раскадровке.

Like in below picture

0 голосов
/ 23 октября 2018

Вы можете попробовать

func tableView(_ tableView: UITableView, 
     heightForRowAt indexPath: IndexPath) -> CGFloat {

   return 60
}

, если хотите, чтобы он динамический

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