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
}
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
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
}
}
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