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 不显示自定义设置。函数执行,但没有显示反馈
如何让 UIRefreshControl 在隐藏后重新出现?