我在UICollectionViews
上放置了多个UIScrollView
。我想下拉UIScrollView
(类似于Instagram和Twitter feed刷新器)并刷新UICollectionViews
中的数据。但是,我尝试的方法无效。
下面是我尝试实现的代码。当我运行此命令并尝试下拉UIScrollView
时。向我显示了指示刷新的表盘,但是没有任何变化,并且从未打印“刷新”。
var refreshControl: UIRefreshControl!
override func viewDidLoad() {
super.viewDidLoad()
scrollView.alwaysBounceVertical = true
scrollView.bounces = true
refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(didPullToRefresh), for: .valueChanged)
self.scrollView.addSubview(refreshControl)
}
@objc func didPullToRefresh() {
targetCollectionView.reloaddata()
print("Refersh")
// For End refrshing
refreshControl.endRefreshing()
}
答案 0 :(得分:0)
由于scrollview中有多个集合视图,因此可能不会在scrollview上触发刷新拉动((由于存在多个集合视图,因此可能在集合视图上)
didPullToRefresh
方法未调用的可能原因?
您已在滚动视图中添加了UIRefreshControl
。因此,当您下拉视图时,它就是集合视图(我认为不是滚动视图)。这就是“刷新”从未打印的原因。
如何检测拉动刷新的视图?
让我们说您对self.view有2个收藏夹视图和1个scrollview。因此在下面的所有视图上添加UIRefreshControl
...
//add refresh control on collection view 1
let refreshController1 = UIRefreshControl(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 30))
refreshController1.addTarget(self, action: #selector(colView1Refreshed), for: .valueChanged)
collectionView1.refreshControl = refreshController1
//add refresh control on collection view 2
let refreshController2 = UIRefreshControl(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 30))
refreshController2.addTarget(self, action: #selector(colView2Refreshed), for: .valueChanged)
collectionView2.refreshControl = refreshController2
//add refresh control on scrollview
let refreshController3 = UIRefreshControl(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 30))
refreshController3.addTarget(self, action: #selector(scrollViewRefreshed), for: .valueChanged)
scrollView.refreshControl = refreshController3
然后实施这些方法来检查拉哪个视图。
@objc func colView1Refreshed() {
print("collection view 1 pulled")
}
@objc func colView2Refreshed() {
print("collection view 2 pulled")
}
@objc func scrollViewRefreshed() {
print("collection view 3 pulled")
}
通过这种方式,您可以确定触发了哪个刷新控件的动作。
注意:上面提到的代码仅是示例。如果您有2个以上的集合视图,则需要在所有其他视图上添加UIRefreshControl
才能对其进行检测。