如何从按钮重新获得互联网后重新加载tableView

时间:2018-03-15 04:09:58

标签: ios swift uitableview appdelegate nsnotificationcenter

当用户在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")
    }
}

3 个答案:

答案 0 :(得分:0)

@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 
}

答案 1 :(得分:0)

重新获得互联网连接更新数据模型(要在表格中显示的数据)后,请致电tableView.reloadData()

答案 2 :(得分:0)

简单重新加载无法恢复您的数据。从服务器获取数据(即:调用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)
 }
}