如何限制UIScrollViewDelegate仅适用于UIViewController中的一个视图

时间:2018-02-25 03:13:53

标签: ios swift uiscrollview uiscrollviewdelegate

我正在使用Swift中的iOS应用程序。在应用程序中,我有一个HomeViewController,它有两个视图 - 一个UICollectionView和UITableView。

class HomeViewController: UIViewController, UITableViewDelegate,
      UITableViewDataSource, UICollectionViewDelegate {

     @IBOutlet weak var tableView: UITableView!
     @IBOutlet weak var carouselCollectionView: UICollectionView!
}

extension HomeViewController: UIScrollViewDelegate {
     func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint,
     targetContentOffset: UnsafeMutablePointer<CGPoint>) {

        let layout = self.carouselCollectionView?.collectionViewLayout as! UICollectionViewFlowLayout
        let cellWidthIncludingSpacing = layout.itemSize.width + layout.minimumLineSpacing
        var offset = targetContentOffset.pointee
        let index = (offset.x + scrollView.contentInset.left) / cellWidthIncludingSpacing
        let roundedIndex = round(index)
        offset = CGPoint(x: roundedIndex * cellWidthIncludingSpacing - scrollView.contentInset.left, y: -scrollView.contentInset.top)
        targetContentOffset.pointee = offset
     }
}

HomeViewController确认到UIScrollViewDelegate - scrollViewWillEndDragging,因为我希望collectionView能够滚动某些特定的行为。 问题是,当我滚动tableView时,它会快速回到顶部。

我想要tableView的默认滚动行为。 如何强制只使用collectionView来使用UIScrollViewDelegate?

1 个答案:

答案 0 :(得分:0)

为tableview和collectionview创建其他经理类。这样,您可以将每个委托的委托设置为自己的经理类。它将帮助保持代码更清晰,更清晰,什么是控制什么,并允许您将scrollview逻辑放入其中一个管理器,而不是使用所有委托方法膨胀视图控制器。