我正在尝试通过下拉UIScrollView刷新一组放置在UIScrollView上的UICollectionViews

时间:2019-05-08 04:11:02

标签: ios swift xcode uiscrollview refresh

我在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()  


   }

1 个答案:

答案 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才能对其进行检测。