iOS tableview, как я могу проверить, прокручивается ли она вверх или вниз

Я изучаю, как работать с TableViews, и мне интересно, как я могу выяснить, прокручивается ли TableView вверх или вниз? Я пробовал разные вещи, такие как это, но он не работал, потому что ниже для scrollview, и у меня есть TableView. Любые предложения были бы замечательными, поскольку я новичок в этом...

  func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    if scrollView.panGestureRecognizer.translation(in: scrollView).y < 0 {
        print("down")
    } else {
        print("up")
    }
}

Это то, что у меня есть в моем табличном коде

func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int {
        return Locations.count
    }

    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        if indexPath.row == self.Posts.count - 4 {

            reloadTable(latmin: self.latmin,latmax: self.latmax,lonmin: self.lonmin,lonmax: self.lonmax,my_id: myID)
            print("Load More")
        }

    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "HomePageTVC", for: indexPath) as! NewCell


   cell.post.text = Posts[indexPath.row]
   cell.fullname.setTitle(FullName[indexPath.row],for: UIControlState.normal)

        return cell
    }

Ответ 1

Как сказал @maddy в комментарии к вашему вопросу, вы можете проверить, прокручивает ли ваш UITableView, используя UIScrollViewDelegate, и, более того, вы можете проверить, в каком направлении он прокручивается, используя функции scrollViewDidScroll и scrollViewWillBeginDragging

// we set a variable to hold the contentOffSet before scroll view scrolls
var lastContentOffset: CGFloat = 0

// this delegate is called when the scrollView (i.e your UITableView) will start scrolling
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    self.lastContentOffset = scrollView.contentOffset.y
}

// while scrolling this delegate is being called so you may now check which direction your scrollView is being scrolled to
func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if (self.lastContentOffset < scrollView.contentOffset.y) {
        // did move up
    } else if (self.lastContentOffset > scrollView.contentOffset.y) {
        // did move down
    } else {
        // didn't move
    }
}

Более того,: вам не нужно создавать подклассы UIViewController с помощью UIScrollViewDelegate, если вы уже подклассифицировали свой UIViewController с помощью UITableViewDelegate, потому что UITableViewDelegate уже является подклассом UIScrollViewDelegate

Ответ 2

Вы можете реализовать метод scrollViewWillEndDragging:

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


    if targetContentOffset.pointee.y < scrollView.contentOffset.y {
        // it going up
    } else {
        // it going down
    }

}

Ответ 3

сначала мы должны сделать два свойства для последнего смещения и текущего смещения

 var lastOffset = CGFloat()
 var currentOffset = CGFloat()

затем в Scrollview VC вызовите scrollViewWillBeginDragging для получения текущего смещения

 override func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {

        self.lastOffset = scrollView.contentOffset.y

    }

и scrollViewWillBeginDecelerating для получения последнего смещения

    override func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {

        self.lastOffset = scrollView.contentOffset.y
        viewStatus(scrollView: scrollView)

    }

тогда с помощью этих двух переменных вы можете узнать свой scrollview W здесь идет...

‍‍‍let isScrollUp = scrollView.contentOffset.y > self.lastOffset
let isScrollDown  = scrollView.contentOffset.y < self.lastOffset