-1

我有UIViewController一个UITableViewUICollectionView。我想在UICollectionView滚动时执行某些任务。

我已经扩展UIScrollViewDelegate并编写了我的代码

func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView)

UITableView但是当两者UICollectionView都滚动时调用此方法。我如何区分这两种观点?我试过了

  func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {

    if let cv = scrollView as? UICollectionView {

    }
  }

但它不起作用。我试过po scrollView了,输出是 <uninitialized>.

4

2 回答 2

0

这是我的错误,但对于这里的其他人,我会发布答案。

当滑块完成拖动/滚动时,我需要执行我的代码。为了实现我所拥有的

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 {

}

工作正常。

于 2020-01-09T10:00:58.823 回答
0

// 假设 tv 和 cv 是表视图和集合视图的出口

目标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;
    }
}

迅速

func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {

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

  }
于 2020-01-09T07:48:49.853 回答