如何让 scrollViewDidScrollToTop 在 UITableView 中工作?
Posted
技术标签:
【中文标题】如何让 scrollViewDidScrollToTop 在 UITableView 中工作?【英文标题】:How can I get scrollViewDidScrollToTop to work in a UITableView? 【发布时间】:2010-01-21 23:25:42 【问题描述】:我认为标题说明了一切。我希望在用户滚动到表格视图顶部时收到通知。
我尝试了以下方法,但没有成功,甚至在 .h 文件中添加了一个 UIScrollViewDelegate。
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
NSLog(@"ScrolledToTop");
谢谢!
编辑:如果我按下状态栏,我可以让它调用。但如果我滚动到顶部,则不会。奇怪...它到达顶部时是否与表格视图弹跳有关?
【问题讨论】:
【参考方案1】:如果你尝试这个会发生什么?
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
if (scrollView.contentOffset.y == 0)
NSLog(@"At the top");
【讨论】:
伙计,效率太低了。它被称为疯了。没有更好的办法吗? 没有更好的方法。每次滚动视图移动一个点时,它都必须检查一次。减少检查的唯一方法是检查用户在滚动后何时抬起手指,但不会立即通知您。取决于你想用它做什么。【参考方案2】:- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
if (indexPath.row == 0 && indexPath.section == 0 )
NSLog(@"Showing top cell");
够近了吗?
【讨论】:
其实不是。我希望它在到达 tableview 标题的顶部时调用。不是第一个细胞。不过感谢您的帮助!【参考方案3】:func scrollViewDidScroll(_ scrollView: UIScrollView)
委托方法可以解决问题,但每次滚动视图移动一个点时都会调用它。一个不太过度活跃的选择可能是这样的:
func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
if targetContentOffset.memory.y == 0.0
println("Reached the Top")
它让代理知道 scrollView 将在它实际到达顶部之前到达顶部,并且因为 targetContentOffset
是一个指针,您可以更改它的值来调整滚动视图完成其滚动动画的位置。
【讨论】:
【参考方案4】:根据您的情况,另外两个可能更简单的选项是:
首先,如果您仅尝试检测 动画 的结果,可以通过自己为 contentOffset
设置动画或调用 UITableView scrollToRowAtIndexPath:
或 UICollectionView scrollToItemAtIndexPath:
来触发, 实施
-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
// You're now at the end of the scrolling animation
用手指手动滚动后不会调用此函数,这有时可能有用,也可能没有帮助。
其次,如果您尝试执行无限滚动等操作,即在到达顶部时刷新列表,或者在到达底部时加载另一页结果,一个简单的方法是只需在您的数据源cellForRowAtIndexPath:
中进行调用,这可能会节省您一起实现委托的需要。
【讨论】:
【参考方案5】:在 Swift 中执行:
func scrollViewDidScroll(scrollView: UIScrollView)
print(scrollView.contentOffset.y)
【讨论】:
以上是关于如何让 scrollViewDidScrollToTop 在 UITableView 中工作?的主要内容,如果未能解决你的问题,请参考以下文章