TableView не refre sh при создании программно - PullRequest
0 голосов
/ 29 апреля 2020

Я программно создал UITableView, который заполняется данными, которые я получаю из API. Когда я получаю данные асинхронно, я пытаюсь обновить свое табличное представление, но оно не обновляется.

Сначала я создаю UITableView в моем UIViewController. Данные, которые я пытаюсь загрузить, загружаются правильно, они появляются только после загрузки начального представления. Когда я пытаюсь обновить sh мои данные, выполнив 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 ()

переопределение удовольствия c 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)
    }

}

1 Ответ

0 голосов
/ 29 апреля 2020

проблема в том, что вы устанавливаете делегатов представления таблицы после перезагрузки представления таблицы, вы должны добавить tableview.reloadData () в setupTableView () в последней строке кода, или вы можете сначала вызвать 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()
}
...