从按钮重新获得互联网后如何重新加载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() 只会调用像numberOfRowscellForRow(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中单击按钮重新加载网页,但在重新加载调用函数后

如何在不关闭和重新加载应用程序的情况下获得新的 JSON 响应

如何重新加载 WPF 网格

提交按钮后如何重新加载谷歌recaptcha而不刷新页面? [复制]