TableView不会以编程方式创建

问题描述 投票:0回答:1

我以编程方式创建了一个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)
    }

}

swift uitableview reloaddata
1个回答
0
投票

问题是您在重新加载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()
}
© www.soinside.com 2019 - 2024. All rights reserved.