【问题标题】:How to use UIActivityIndicatorView in tableView after finish data fetching完成数据获取后如何在tableView中使用UIActivityIndi​​catorView
【发布时间】:2018-07-24 05:38:27
【问题描述】:

所以我尝试在 tableview 加载所有数据之前添加一个指标,所以我用谷歌搜索了它,我找到了以下代码并且效果很好:

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if let lastVisibleIndexPath = tableView.indexPathsForVisibleRows?.last {
    if indexPath == lastVisibleIndexPath {
        indicator.stopAnimating()
    }
}

但问题是它仅在我有数据要加载或有单元格要显示时才有效,当没有数据或没有单元格时,指示器会停留在那里并继续旋转。谁能告诉我如何解决这个问题。非常感谢!

【问题讨论】:

  • 异步加载模型对象并显示活动指示器。在完成块中停止动画活动指示器。如果您需要示例,请分享您加载数据模型的代码 sn-p。
  • 你能说明你在哪里调用你的网络服务来获取数据吗?
  • 如何收集表格数据?可以出示一下代码吗?

标签: ios swift xcode


【解决方案1】:

我建议您在 API 调用的完成块中控制活动指示器视图,而不是在将显示单元格委托方法中进行。请参阅示例。

func makeAPICall() {
        indicator.startAnimating()
        YourAPIManger.yourAPICallWith(params) { (isAuthenticated, message) in
          indicator.stopAnimating()
          YourTableView.reload()

        }
}

【讨论】:

    【解决方案2】:

    从你的 API 获取所有数据后,检查它是否为 nil,然后 stopAnimating() 你的指标。

    【讨论】:

      【解决方案3】:

      您可以在tableView footerView 上添加活动指示器

      lazy var spinner: UIActivityIndicatorView = {
          let activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
          activityIndicator.color = UIColor.gray
          activityIndicator.startAnimating()
          activityIndicator.hidesWhenStopped = true
          return activityIndicator
      }()
      

      在tableView上

      func displayLoading() {
          tableView.tableFooterView = spinner
          spinner.startAnimating()
          tableView.reloadData()
      }
      
      func hideLoading() {
          spinner.stopAnimating()
          tableView.reloadData()
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多