2010-01-21 56 views
4

我认为标题解释了一切。我想在用户滚动到桌面视图的顶部时收到通知。如何让scrollViewDidScrollToTop在UITableView中工作?

我试过以下没有运气,甚至添加一个UIScrollViewDelegate到.h文件。

- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView{ 
    NSLog(@"ScrolledToTop"); 
} 

谢谢!

编辑:如果我按状态栏,我可以调用它。但是,如果我滚动到顶部,则不是。奇怪...它可能与桌面弹跳到顶部时有什么关系?

回答

17

如果您尝试此操作,会发生什么情况?

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    if (scrollView.contentOffset.y == 0) 
     NSLog(@"At the top"); 
} 
+0

这样做!谢谢! – Jonah 2010-01-22 00:58:15

+0

男人,这是如此低效。它被称为疯狂。没有更好的方法吗? – mskw 2013-08-28 04:33:56

+0

没有更好的方法。它必须检查每次滚动视图移动一个点。检查较少的唯一方法是检查用户在滚动后抬起手指的时间,但不会一直通知您。取决于你想要用它做什么。 – MichaelThiessen 2013-09-09 20:54:41

2
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 

if (indexPath.row == 0 && indexPath.section == 0) { 
    NSLog(@"Showing top cell"); 

} 

这样就够了吗?

+0

其实,事实并非如此。我希望它在到达tableview标题顶部时调用。不是第一个单元格。感谢您的帮助! – Jonah 2010-01-21 23:44:54

+0

贾斯汀,你没有明白这一点。 geez – 2010-12-08 20:55:32

1

该委托方法将做的伎俩,但它会在每次滚动视图移动一个点时被调用。一个不太亢进替代办法是这样的:

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>){ 
    if targetContentOffset.memory.y == 0.0 { 
     println("Reached the Top") 
} 

它让代表知道滚动视图将达到顶峰,它实际上到达那里之前,因为targetContentOffset是一个指针,你可以改变它的值调整在滚动视图完成其滚动动画。这可能是简单的根据您的具体情况

0

两个选项是:

首先,如果你想检测动画只,触发可以自行动画contentOffset或通过拨打电话的结果到UITableView的scrollToRowAtIndexPath:,或UICollectionView scrollToItemAtIndexPath:,实现

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { 
    // You're now at the end of the scrolling animation 
} 

这不会不手动滚动用手指,这可能会或可能没有帮助,有时后调用。其次,如果您尝试进行无限滚动等操作,当您到达顶部时刷新列表,或者在到达底部时加载另一个结果页面,一个简单的方法是只需使用在您的数据源cellForRowAtIndexPath:拨打电话,这可能会节省您一起实施代表的需要。

0

做到在斯威夫特:

func scrollViewDidScroll(scrollView: UIScrollView) { 
    print(scrollView.contentOffset.y) 
}