【发布时间】:2018-06-02 05:12:02
【问题描述】:
我不太确定是否有人遇到过这个问题,但似乎我的 refreshControl 太敏感了。在我的实现中,我尝试进行拉动以刷新,并且代码甚至在我看到 refreshControl 旋转之前执行。
我做错了什么吗?
到目前为止我的实现。
//At initiation
lazy var refreshControl: UIRefreshControl = {
let rc = UIRefreshControl()
rc.tintColor = .white
rc.addTarget(self, action: #selector(refreshControlDidRefresh), for: .valueChanged)
return rc
}()
//At viewDidLoad(), I call a function setupViews()
func setupViews() {
view.backgroundColor = .white
view.addSubview(tableView)
tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
tableView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
tableView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
tableView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
tableView.register(GossipsTableViewCell.self, forCellReuseIdentifier: "gossipCell")
tableView.tableHeaderView = emptyTableViewHeader()
tableView.refreshControl = refreshControl
}
@objc func refreshControlDidRefresh() {
DispatchQueue.main.async {
self.gossips.removeAll()
self.tableView.reloadData()
}
getData()
}
func getData() {
FirebaseClient.shared.fetchAllGossips { (results, error) in
if let error = error {
print(error.localizedDescription)
} else if let results = results {
self.gossips = results.sorted(by: { (gossip1, gossip2) -> Bool in
guard
let gossip1Timestamp = gossip1.timestamp,
let gossip2Timestamp = gossip2.timestamp else {
return false
}
return gossip1Timestamp > gossip2Timestamp
})
self.filterGossips()
DispatchQueue.main.async {
if self.refreshControl.isRefreshing {
self.refreshControl.endRefreshing()
}
if JustHUD.shared.isActive {
JustHUD.shared.hide()
}
var indexPaths = [IndexPath]()
for (index, _) in self.gossips.enumerated() {
let indexPath = IndexPath(row: index, section: 0)
indexPaths.append(indexPath)
}
self.tableView.insertRows(at: indexPaths, with: .automatic)
self.segmentedControl.isUserInteractionEnabled = true
}
}
}
}
您可以在此处看到结果。当我尝试下拉时,甚至在我开始看到正在绘制的 refreshControl 之前就执行了刷新。有什么我遗漏的吗?
【问题讨论】:
-
适当的向下页面调用pull刷新
标签: ios swift uitableview uirefreshcontrol