Получить тип UIScrollView внутри методов UIScrollViewDelegate - PullRequest
0 голосов
/ 09 января 2020

У меня есть UIViewController, в котором есть UITableView и UICollectionView. Я хочу выполнять определенные задачи при прокрутке UICollectionView.

Я расширил UIScrollViewDelegate и написал свой код в

func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView)

Но этот метод вызывается, когда прокручиваются и UITableView, и UICollectionView. Как мне отличить два взгляда здесь? Я пытался

  func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {

    if let cv = scrollView as? UICollectionView {

    }
  }

Но это не работает. Я попытался po scrollView и вывод <uninitialized>.

Ответы [ 2 ]

0 голосов
/ 09 января 2020

Это была ошибка с моей стороны, но для других здесь я выложу ответ.

Мне нужно было выполнить мой код, когда слайдер закончил перетаскивание / прокрутку. Чтобы добиться этого, у меня было

func scrollViewDidScroll(_ scrollView: UIScrollView) {

    NSObject.cancelPreviousPerformRequests(withTarget: self)
    perform(#selector(UIScrollViewDelegate.scrollViewDidEndScrollingAnimation), with: nil, afterDelay: 0.3)
}

Проблема была в строке

perform(#selector(UIScrollViewDelegate.scrollViewDidEndScrollingAnimation), with: nil, afterDelay: 0.3)

Вместо того, чтобы передавать ноль, я написал

perform(#selector(UIScrollViewDelegate.scrollViewDidEndScrollingAnimation), with: scrollView afterDelay: 0.3)

, и это решило ее. Я больше не получал scrollView <uninitialized>, а мой

if let cv = scrollView as? UICollectionView {

}

работал нормально.

0 голосов
/ 09 января 2020

// Скажем, телевизор и резюме - это выходы в виде таблицы и в виде коллекции

Цель c

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView == self.tv) {
        self.tv.contentOffset = self.tv.contentOffset;
    } else if (scrollView == self.cv) {
        self.cv.contentOffset = self.cv.contentOffset;
    }
}

Swift

func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {

    if let scrollView == tv {
         //do whatever you need with tableView
    }
    if let scrollView == cv {
        //do whatever you need with collectionView
    }

  }
...