我有一个UITableView
,其中显示了json模型中的数据。没有数据时我需要显示文本。
我尝试使用以下代码:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if datosEventos.events.count == 0{
let emptyLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: self.view.bounds.size.height))
emptyLabel.text = "No Data"
emptyLabel.textAlignment = NSTextAlignment.center
self.tableView.backgroundView = emptyLabel
self.tableView.separatorStyle = UITableViewCell.SeparatorStyle.none
return 0
} else {
return datosEventos.events.count
}
}
在没有数据的情况下它可以很好地工作,但是在有数据的情况下,它还会显示几秒钟,然后再将数据加载到表中。
我尝试使用此处找到的其他解决方案,但是与有数据时加载表时的问题相同,该消息会显示几秒钟,而在有数据时则不应该显示该消息。
我获取json数据的功能是:
func GetData() {
// Remote JSON to Structed Object
let url = URL(string: "https://testmysite.com/wp-json/tribe/events/v1/events")
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error == nil {
do {
// Decode data to object
self.datosEventos = try JSONDecoder().decode(EventsFeed.self, from: data!)
DispatchQueue.main.async {
self.tableView.reloadData()
self.refreshControl!.endRefreshing()
print(self.datosEventos)
}
} catch let jsonError{
print("An error occurred: \(jsonError)")
}
}
}.resume()
}
Also try this solution, but the same problem.
图片->有数据的示例:
答案 0 :(得分:0)
最初,表在没有数据时加载,因此命中
if datosEventos.events.count == 0{
let emptyLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: self.view.bounds.size.height))
emptyLabel.text = "No Data"
emptyLabel.textAlignment = NSTextAlignment.center
self.tableView.backgroundView = emptyLabel
self.tableView.separatorStyle = UITableViewCell.SeparatorStyle.none
因此,您可以在数据返回此处后在回调内部进行操作
DispatchQueue.main.async { // Recommended
if datosEventos.events.count == 0 {
}
else {}
}
或
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if datosEventos.events.count == 0{
let emptyLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: self.view.bounds.size.height))
emptyLabel.text = "No Data"
emptyLabel.textAlignment = NSTextAlignment.center
self.tableView.backgroundView = emptyLabel
self.tableView.separatorStyle = UITableViewCell.SeparatorStyle.none
return 0
} else {
self.tableView.backgroundView = nil
return datosEventos.events.count
}
}
不建议使用后一种选项,因为它将在一段时间内显示no Data
,因此建议您先使用该建议