使用 Swift 3 拉动刷新和 Alamofire

Posted

技术标签:

【中文标题】使用 Swift 3 拉动刷新和 Alamofire【英文标题】:Pull to refresh and Alamofire using Swift 3 【发布时间】:2016-11-24 12:32:29 【问题描述】:

我正在使用 Alamofire 从 Web URL(JSON) 获取数据。我正在尝试在我的项目中实现对RefreshControl 的拉取。我已经完成了,但不知道它是否正确,或者刷新时数据是否正在更新。我的代码是:

var refresh = UIRefreshControl()

refresh.addTarget(self, action: #selector(self.refreshData), for: UIControlEvents.valueChanged)

func refreshData() 

    Alamofire.request("https://www.example.com/api").responseJSON(completionHandler: 
        response in
        self.parseData(JSONData: response.data!)
        self.tableView.separatorStyle = UITableViewCellSeparatorStyle.singleLine

        self.tableView.reloadData()
        self.refresh.endRefreshing()


    )        

这是正确的吗?

【问题讨论】:

【参考方案1】:

您做得正确,但您需要重新加载 tableView 并在主线程上停止 UIRefreshControl

DispatchQueue.main.async 
    self.tableView.reloadData()
    self.refresh.endRefreshing()             

注意:您需要使用 viewDidLoad 或 Interface builder 设置一次,而不是始终在 API 请求上设置 separatorStyle

【讨论】:

那么我会把这个 Nirav 放在哪里呢? 与您当前重新加载 tableView 的位置相同,只需在主线程中添加这两行即可。 Nirav,包括我在内的所有上述代码都必须放在override func viewDidLoad() super.viewDidLoad() 中吗? viewDidLoad 你只需要设置这一行self.tableView.separatorStyle = UITableViewCellSeparatorStyle.singleLine

以上是关于使用 Swift 3 拉动刷新和 Alamofire的主要内容,如果未能解决你的问题,请参考以下文章

如何在iOS swift中的表格视图按钮中进行拉动刷新[重复]

拉动刷新不起作用

是否可以在没有表格视图的情况下创建拉动刷新?

UITableView上方的自定义UIView(用户拉动刷新时)

如何包含没有类型定义的第 3 方模块(角度拉动刷新)

RestKit 和拉动刷新