【问题标题】:RefreshControl doesn't hideRefreshControl 不隐藏
【发布时间】:2017-05-25 12:09:06
【问题描述】:

刷新进度完成后,我的刷新控件不会消失。即使我调用 endRefreshing(),它仍然是动画。

import UIKit

class MyTableViewController: UITableViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        refreshControl = UIRefreshControl()
        refreshControl?.attributedTitle = NSAttributedString(string: "Pull to refresh")
        refreshControl?.addTarget(self, action: #selector(self.refresh), for: UIControlEvents.valueChanged)
        tableView.addSubview(refreshControl!)

        setData()
    }

    func setData(){
        ApiClient.sharedInstance().getData{(myData, error) in
            if (myData != nil){
                DispatchQueue.main.async {
                    self.myLabel.text = myData
                    self.refreshControl?.endRefreshing()
                }
            }

            if (error != nil){
                print(error)
            }
        }
    }

    func refresh(sender:AnyObject) {
        setData()
    }

}

你能帮帮我吗?

【问题讨论】:

  • 你需要在主线程上调用endRefreshing。
  • 这不是已经用“DispatchQueue.main.async {”完成了吗?
  • self.myLabel.text 更新了吗?
  • 异步是后台线程。同步改成主线程/dispatch_get_main_queue
  • 哦,我想我明白了:当我松开手指时,圆圈消失了。但是当我按住手指时,即使刷新完成,指示器仍然保持动画。但显然(如在contacts-和mail.app中),在松开手指之前隐藏指示器并不是故意的……你能同意吗? - 例如,为了实现 WhatsApp 中的效果,我想我只是要使用 refreshControll.isHidden 隐藏指示器

标签: ios swift tableview refresh


【解决方案1】:

beginUpdates 和 endUpdates 发挥了作用。

这个让我发疯了 1 个小时。最后,当我的网络调用完成并刷新表格视图时,这部分工作。

 class TransactionsViewConttroller : MyBaseTableViewController{
    override func viewDidLoad() {
        super.viewDidLoad()
        self.refreshControl?.addTarget(self, action: #selector(refresh), for: .valueChanged)
    }
    @objc func refresh() {
        justRefreshTransactions()  
    }

    private func justRefreshTransactions(){
         ServiceRequest.getLatestTransactions(completionBlock : {(error, errorMsg,result) in 
                 self.stopRefrshIndic()
         })
    }

    private func stopRefrshIndic(){
        DispatchQueue.main.async {
            self.tableView.beginUpdates()
            self.refreshControl?.endRefreshing()
            self.tableView.endUpdates()
        }
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 2014-08-28
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    相关资源
    最近更新 更多