【发布时间】:2013-05-07 11:09:41
【问题描述】:
有没有办法检查我的 tableview 是否刚刚完成滚动? table.isDragging 和 table.isDecelerating 是我能找到的仅有的两种方法。我不确定当 tableview 完成滚动时如何预测或收到通知。
如果 tableView 正在滚动,我可以以某种方式使用计时器来检查每一秒吗?
【问题讨论】:
标签: ios objective-c uitableview uiscrollview
有没有办法检查我的 tableview 是否刚刚完成滚动? table.isDragging 和 table.isDecelerating 是我能找到的仅有的两种方法。我不确定当 tableview 完成滚动时如何预测或收到通知。
如果 tableView 正在滚动,我可以以某种方式使用计时器来检查每一秒吗?
【问题讨论】:
标签: ios objective-c uitableview uiscrollview
您将按如下方式实现UIScrollViewDelegate 协议方法:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
if (!decelerate) {
[self scrollingFinish];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
[self scrollingFinish];
}
- (void)scrollingFinish {
//enter code here
}
斯威夫特版本
public func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if decelerate {
scrollingFinished()
}
}
public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
scrollingFinished()
}
func scrollingFinished() {
print("scrolling finished...")
}
对于上面的委托方法The scroll view sends this message when the user’s finger touches up after dragging content. The decelerating property of UIScrollView controls deceleration.当视图减速停止时,参数decelerate将是NO。
第二个用于缓慢滚动,甚至当您的手指触摸时滚动停止,正如 Apple Documents 所说,when the scrolling movement comes to a halt。
【讨论】:
每次用户滚动停止时,以下代码都会更新您。
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if (!decelerate)
{
if (isScrollingStart)
{
isScrollingStart=NO;
[self scrollingStopped];
}
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
if (isScrollingStart)
{
isScrollingStart=NO;
[self scrollingStopped];
}
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
isScrollingStart=YES;
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
isScrollingStart=YES;
}
-(void)scrollingStopped
{
NSLog(@"Scrolling stopped");
}
【讨论】:
isScrollingEnd 已写入但从未使用过。是否以防万一您需要使用它?您是要在 scrollingStopped 中检查它吗?
UITableView 符合 UIScrollViewDelegate。请参阅该协议的文档,它有您需要的方法。
【讨论】:
在使用shanegao's answer 和 Jovan Stankovic 对此的评论后,我为 Swift3 设计了这个 -
extension NMViewController: UIScrollViewDelegate {
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if !decelerate {
scrollViewDidEndDecelerating(scrollView)
}
}
func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
scrollViewDidEndDecelerating(scrollView)
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
// Your logic to handle after scrolling is done
}
}
【讨论】: