web-dev-qa-db-fra.com

iOS tableview comment puis-je vérifier s'il défile vers le haut ou vers le bas

J'apprends à travailler avec TableViews et je me demande comment savoir si la tableView défile vers le haut ou vers le bas? J'ai essayé différentes choses comme celle-ci, mais cela n'a pas fonctionné, car ci-dessous est pour un scrollview et j'ai une TableView. Toutes les suggestions seraient formidables car je suis nouveau dans ce domaine ...

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

Voici ce que j'ai dans mon code tableView

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
    }
20
Rome Torres

Comme @maddy l'a dit dans le commentaire de votre question, vous pouvez vérifier si votre UITableView défile en utilisant le UIScrollViewDelegate et plus encore, vous pouvez vérifier dans quelle direction il défile en utilisant les deux scrollViewDidScroll et 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
    }
}

De plus: Vous n'avez pas besoin de sous-classer votre UIViewController avec UIScrollViewDelegate si vous avez déjà sous-classé votre UIViewController avec UITableViewDelegate car UITableViewDelegate est déjà une sous-classe de UIScrollViewDelegate

37
Zonily Jame

Vous pouvez implémenter la méthode scrollViewWillEndDragging:

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


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

}
26
Alexandre Lara

nous devons d'abord faire deux propriétés pour le dernier décalage et le décalage actuel

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

puis dans Scrollview VC appelez scrollViewWillBeginDragging pour obtenir le décalage actuel

 override func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {

        self.lastOffset = scrollView.contentOffset.y

    }

et scrollViewWillBeginDecelerating pour obtenir le dernier décalage

    override func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {

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

    }

puis avec ces deux variables, vous pouvez connaître votre scrollview W ici ça va‍‍‍‍

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