我以编程方式创建了一个UITableView,其中填充了我从API提取的数据。当我异步获取数据时,我尝试更新表视图,但不会更新。
我首先在UIViewController中创建一个UITableView。我尝试加载的数据确实正确加载,只是在初始视图加载后才输入。当我尝试通过执行reloadData()刷新数据时,没有任何反应。
我想念的是什么?谢谢!
创建我的控制器:
class SpotifyTableViewController: UIViewController, UITableViewDelegate {
//table view programmatically added
let tableView = UITableView()
var safeArea: UILayoutGuide!
var playlists = [PlaylistItem]()
@objc func handleRefreshControl() {
// Update your content…
tableView.reloadData()
// Dismiss the refresh control.
DispatchQueue.main.async {
self.tableView.refreshControl?.endRefreshing()
}
}
我的viewDidLoad()函数
覆盖func viewDidLoad(){
super.viewDidLoad()
view.backgroundColor = .white
let refreshControl = UIRefreshControl()
tableView.refreshControl?.addTarget(tableView, action:
#selector(handleRefreshControl),
for: .valueChanged)
tableView.refreshControl = refreshControl
self.loadPlaylists(accessToken:
setupTableView()
}
设置表格:
func setupTableView() {
view.addSubview(tableView)
tableView.delegate = self
tableView.dataSource = self
}
func loadPlaylists(accessToken: String) {
.... make API call and retrieve data
let task = session.dataTask(with: url, completionHandler: { data, response, error in
DispatchQueue.main.async {
// update UI
...
}
}
DispatchQueue.main.async{
self.tableView.reloadData()
}
return
}
}
})
task.resume()
self.tableView.performSelector(onMainThread: Selector("reloadData"), with: nil, waitUntilDone: true)
}
}
问题是您在重新加载tableview之后设置tableview委托,您必须在代码的最后一行中的setupTableView()中添加tableview.reloadData(),或者您可以先调用setupTableView(),然后再调用self.loadPlaylists(accessToken:
super.viewDidLoad()
view.backgroundColor = .white
let refreshControl = UIRefreshControl()
tableView.refreshControl?.addTarget(tableView, action:
#selector(handleRefreshControl),
for: .valueChanged)
tableView.refreshControl = refreshControl
setupTableView()
self.loadPlaylists(accessToken:
或
func setupTableView() {
view.addSubview(tableView)
tableView.delegate = self
tableView.dataSource = self
tableView.reloadData()
}