2017-03-02 30 views
0

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

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() 
} 
+0

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

回答

2

移动tableView.reloadData()到你可以肯定的是search()功能已经完成并返回结果的地方。如果这是一个异步函数,那么添加一个完成处理程序,以便知道何时调用reloadData()。然后,你可以调用该函数像这样:

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

或者,当你在斯威夫特3

DispatchQueue.main.async {...} 
1

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

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