Как назначить значение счетчика ячеек таблицы программному UILabel? - PullRequest
0 голосов
/ 10 июня 2019

Я создал UILabel программно и хотел бы, чтобы он отображал количество ячеек в TableView.

У меня есть следующий код в моем viewDidLoad()

let lb = UILabel()
lb.textAlignment = .center
lb.numberOfLines = 0
lb.text = "Num of Cells: \(structure.count)"
lb.font = UIFont.boldSystemFont(ofSize: 18.0)

newView.addSubview(lb)

И хотел бы присвоить ему следующее значение structure.count.

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

Простое выполнение следующего действия в viewDidLoad() приводит к 0 при загрузке до загрузки ячеек таблицы:

lb.text = "Num of Cells: \(structure.count)"

Как я могу присвоить метке значение struct.count после загрузки всех ячеек в табличном представлении?

Структура заполняется так:

    URLSession.shared.dataTask(with: request) { data, _, error in
        guard let data = data else { return }


        do {
            self.structure = try JSONDecoder().decode([StructOne].self,from:data)
            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
        }
        catch {
            print(error)
        }

        }.resume()

}

1 Ответ

0 голосов
/ 10 июня 2019

Поскольку вы загружаете данные асинхронно, вы не можете обновить метку в viewDidLoad. Вам необходимо обновить метку после заполнения structure.

Просто переместите:

lb.text = "Num of Cells: \(structure.count)"

находиться внутри блока DispatchQueue.main.async вместе с вызовом для перезагрузки табличного представления.

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