从按钮重新获得互联网后如何重新加载tableView
Posted
技术标签:
【中文标题】从按钮重新获得互联网后如何重新加载tableView【英文标题】:How to reload tableView after regaining internet from a button 【发布时间】:2018-03-15 04:09:57 【问题描述】:我在tableViewController
中设置了当用户失去互联网连接时的所有错误处理代码。假设用户退出单元格然后返回,ProgressHUD
(自定义活动指示器)将从viewDidAppear
弹出,并且不会显示任何单元格,因为他们没有任何 wifi。之后假设用户重新连接,但tableView
仍然为空,我在导航栏中有一个按钮,可以从UIApplicationDidBecomeActive
重新加载数据,但唯一的问题是 tableView 没有在那里更新仍然没有细胞出现。
@IBAction func tableReload(_ sender: Any)
if reach.connection == .wifi || reach.connection == .cellular
NotificationCenter.default.addObserver(self, selector: #selector(reloadTable(note:)), name: NSNotification.Name.UIApplicationDidBecomeActive, object: nil)
else
ProgressHUD.showError("Can not reload if there is no internet connection")// activity indicator from a library
@objc func reloadTable(note: NSNotification)
let reachability = note.object as! Reachability
if reachability.connection == .wifi || reachability.connection == .cellular
ProgressHUD.showSuccess("Wifi is good")
self.tableView.isScrollEnabled = true
self.tableView.isUserInteractionEnabled = true
self.tableView.reloadData()
else
tableView.isScrollEnabled = false
tableView.isUserInteractionEnabled = false
ProgressHUD.show("Can not reload with no internet connection")
【问题讨论】:
tableView.reloadData()
只会调用像numberOfRows
和cellForRow(at:)
这样的数据源方法。因此,如果数据源依赖于模型,那么该模型将需要从服务器重新获取数据,然后在 table view 上重新加载数据
@user1046037 好的,我会看看我能做什么
【参考方案1】:
@objc func reloadTable(note: NSNotification)
let reachability = note.object as! Reachability
if reachability.connection == .wifi || reachability.connection == .cellular
ProgressHUD.showSuccess("Wifi is good")
self.tableView.isScrollEnabled = true
self.tableView.isUserInteractionEnabled = true
self.fetchData() // call fetch Method
else
tableView.isScrollEnabled = false
tableView.isUserInteractionEnabled = false
ProgressHUD.show("Can not reload with no internet connection")
func fetchData()
// Assign data to TableView's DataSource
// Now reload the TableView
【讨论】:
【参考方案2】:在恢复您的互联网连接后更新数据模型(您想在表格中显示的数据)然后致电tableView.reloadData()
【讨论】:
【参考方案3】:简单地重新加载不会恢复您的数据。从服务器获取您的数据(即:调用 API),如果它成功加载您的数组/字典以将数据传递给 tableViewDataSource,然后重新加载 tableView 数据....!
例子:
Alamofire.request(urlString).responseJSON (response) in
if response.result.isSuccess
completion(response.result.value as AnyObject?, "", true)
// pass values to array/Dictionary
let restDict = response.result
// reload TableView
tableView.reloadData()
else
completion(nil, "", false)
【讨论】:
如果我不使用 switfsoup,那就太好了。不过,谢谢你的回复。以上是关于从按钮重新获得互联网后如何重新加载tableView的主要内容,如果未能解决你的问题,请参考以下文章
如何在javascript中单击按钮重新加载网页,但在重新加载调用函数后