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