RefreshControl 不隐藏

Posted

技术标签:

【中文标题】RefreshControl 不隐藏【英文标题】:RefreshControl doesn't hide 【发布时间】: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 隐藏指示器 【参考方案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()
        
    

【讨论】:

以上是关于RefreshControl 不隐藏的主要内容,如果未能解决你的问题,请参考以下文章

ScrollView.refreshControl = refreshControl 不显示自定义设置。函数执行,但没有显示反馈

RefreshControl 释放时不流畅

如何让 UIRefreshControl 在隐藏后重新出现?

RefreshControl 数据重复每次在 React Native 中拉动以刷新 ScrollView

如何抵消 RefreshControl

RefreshControl 在其他选项卡中以类似方式使用的代码的选项卡之一中不起作用