【问题标题】:UIRefreshControl does not workUIRefreshControl 不起作用
【发布时间】:2017-07-22 17:56:39
【问题描述】:

我的项目仍在使用 Swift 2.3,尚未迁移到 Swift 3。当我使用以下代码下拉表格视图时,我可以验证在调试区域中可以看到刷新的数据,但它不会反映在表格视图上。我在 IOS 9 和 IOS 10 上都试过了。

 var refreshControl = UIRefreshControl()

 if #available(iOS 10.0, *) {
    TableView.refreshControl = refreshControl
 } else {
    TableView.addSubview(refreshControl)
 }

 refreshControl.addTarget(self, action: #selector(self.handleRefresh), forControlEvents: UIControlEvents.ValueChanged)

 func handleRefresh(refreshControl: UIRefreshControl) {
     refreshControl.beginRefreshing()

     Search()
     TableView.reloadData()

     refreshControl.endRefreshing()
 }

【问题讨论】:

  • 你的 search() 函数是异步的吗?如果是这样,reloadData() 方法可能会在 search() 完成之前运行。如果它是异步的,请尝试将 reloadData()endRefreshing 调用移动到 search() 并确保它们在搜索实际完成运行后运行..

标签: ios swift pull-to-refresh uirefreshcontrol


【解决方案1】:

tableView.reloadData() 移动到可以确定search() 函数已完成并返回结果的位置。如果这是一个异步函数,则添加一个完成处理程序,以便您知道何时调用reloadData()。然后你可以像这样调用函数:

search {
    dispatch_async(dispatch_get_main_queue()) {
        tableView.reloadData()
    }
}

或者,当您使用 Swift 3 时

DispatchQueue.main.async {...}

【讨论】:

    【解决方案2】:

    尝试在主线程上重新加载 tableView。

    DispatchQueue.main.async {
    self.tableView.reloadData()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      相关资源
      最近更新 更多