Я пытаюсь обновить набор UICollectionViews, все размещенные на UIScrollView, потянув вниз на UIScrollView - PullRequest
0 голосов
/ 08 мая 2019

У меня есть несколько UICollectionViews всех размещенных на UIScrollView. Я хочу опустить UIScrollView (аналогично обновлениям в Instagram и Twitter) и обновить данные в 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 голосов
/ 08 мая 2019

Поскольку в представлении прокрутки имеется несколько представлений коллекции, возможно, что обновление для обновления не запускается при просмотре прокрутки (может быть в представлении коллекции, так как имеется несколько представлений коллекции)

Возможная причинаПочему didPullToRefresh метод не вызывается?

Вы добавили UIRefreshControl в scrollview.Поэтому, когда вы опускаете представление, оно является представлением коллекции (я думаю, что это не прокрутка).Вот почему «обновление» никогда не печатается.

Как определить, какой вид извлекается для обновления?

Допустим, у вас есть 2 коллекциипросмотр и 1 прокрутка на себя.поэтому добавьте 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 на все остальные виды, чтобы обнаружить его.

...