当用户滚动到UITableView
的底部时,是否有办法触发事件(例如使用IBAction
)?如果发生这种情况,我想添加更多行。我该怎么做呢?滚动到底部时将行添加到UITableView
回答
只需聆听scrollViewDidScroll:
委托方法,将内容偏移量与当前可能的偏移量进行比较,如果低于某个阈值,则调用您的方法更新tableview。不要忘记拨打[tableView reloadData]
以确保它重新加载新添加的数据。
编辑:放在一起抽象的代码,不知道它是否工作,但应该。
- (void)scrollViewDidScroll: (UIScrollView *)scroll {
// UITableView only moves in one direction, y axis
CGFloat currentOffset = scroll.contentOffset.y;
CGFloat maximumOffset = scroll.contentSize.height - scroll.frame.size.height;
// Change 10.0 to adjust the distance from bottom
if (maximumOffset - currentOffset <= 10.0) {
[self methodThatAddsDataAndReloadsTableView];
}
}
介意显示一些码? – aherlambang 2011-05-16 21:43:10
没有项目atm来快速显示内容。我认为你的viewController是tableView的委托。如果是这样,只需将scrollViewDidScroll:添加到viewController并将其用作触发更新方法的地方。将contentOffset.y与最大值(contenSize.y - tableView.frame.size.height)进行比较应该非常简单。 – 2011-05-16 21:45:23
关键是要认识到UITableView是UIScrollView的子类,它也传递委托方法。 – 2011-05-16 21:46:33
我不知道你为什么想这样做,但我想你可以在cellForRowAtIndexPath
方法中添加一些代码,这样如果indexPath.row ==最后一行,调用方法来添加更多行。 ..
,因为我想调用一个REST Web服务来添加更多的行,因为用户可以看到更多的条目,而不是“加载更多文章”类的东西,为什么不自动执行 – aherlambang 2011-05-16 21:42:57
除非这有点晚了,但我想我找到了一个更好的解决方案:
,而不是
- (void)scrollViewDidScroll: (UIScrollView)scroll
我用
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
这是方便多了,导致事件只触发一次。 我在我的应用程序中使用此代码在底部的tableview中加载更多行(也许您从Facebook应用程序识别此类重新加载 - 只是它们在顶部更新的区别)。
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
NSInteger currentOffset = scrollView.contentOffset.y;
NSInteger maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height;
if (maximumOffset - currentOffset <= -40) {
NSLog(@"reload");
}
}
希望任何人都会对此有所帮助。
NSInteger currentOffset = scrollView.contentOffset.y;
NSInteger maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height;
// Hit Bottom?
if ((currentOffset > 0) && (maximumOffset - currentOffset) <= 10) {
// Hit Bottom !!
}
它可以更简单的方式来实现我猜,你只需要确定的滚动方向在这种情况下,当用户滚动向下它。
首先在.h文件中声明一个变量:
CGPoint pointNow;
在.m文件,在scrollViewDidScroll方法,我们需要实现这个代码: -
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.contentOffset.y > pointNow.y) {
//Enter code here
}
}
我用这个片段。在tableView:willDisplayCell:forRowAtIndexPath:
我检查,如果具有最后索引路径的单元格即将显示。
对于一个路段的的tableView:
[indexPath isEqual:[NSIndexPath indexPathForRow:[self tableView:self.tableView numberOfRowsInSection:0]-1 inSection:0]
与多个部分:
[indexPath isEqual:[NSIndexPath indexPathForRow:[self tableView:self.tableView numberOfRowsInSection:0]-1 inSection:[self numberOfSectionsInTableView:self.tableView]-1]
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if(!_noMoreDataAvailable)
{
if ([indexPath isEqual:[NSIndexPath indexPathForRow:[self tableView:self.tableView numberOfRowsInSection:0]-1 inSection:0]])
{
[self.dataSourceController fetchNewData];
}
}
}
获取的dataSourceController将通知的tableView委托,这将重新加载数据后。
斯威夫特
这里是@user944351's answer雨燕版本:
func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
let currentOffset = scrollView.contentOffset.y
let maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height
if maximumOffset - currentOffset <= -40 {
print("reload")
}
}
就在这个方法添加到您的UITableView
委托类。我发现-40
太大,但您可以根据自己的需要进行调整。
更多信息
- 参见my fuller answer具有方法的示例重新加载使用用于数据库限制和偏移数据。
- 1. UITableView添加行并滚动到底部
- 2. 当滚动到底部并添加新行时,UITableView冻结
- 3. UITableView不滚动到底部
- 4. uitableview不滚动到底部
- 5. 随着新行的添加,保持UITableView滚动到底部
- 6. 将新内容添加到分区时滚动到底部
- 7. iOS UITableView滚动到部分底部
- 8. UITableView无法滚动到底部
- 9. 当滚动到底部时,UITableView加载更多
- 10. Div在加载时滚动到底部
- 11. 当UITableView已滚动到底部时检测到
- 12. 页脚添加到UITableView的底部
- 13. 当滚动到顶部而不是底部时添加元素
- 14. 自动将UITableView滚动到Rx的底部Swift
- 15. 每次使用动画时,UITableView都不会滚动到底部
- 16. 将新的md-list-item添加到md-list时滚动到底部Angular Material
- 17. 当用户滚动到底部时,如何将项目添加到DataGrid?
- 18. 只有在将新数据添加到div时滚动到div的底部
- 19. UITableView滚动到底部看到插入动画
- 20. 将行添加到表的底部
- 21. 将总行添加到枢轴底部
- 22. 将按钮添加到UITableView顶部和底部
- 23. 将行添加到UITableView后发生意外的滚动行为
- 24. 将滚动功能添加到UITableView的每个部分
- 25. 将按钮添加到不滚动屏幕的底部
- 26. 将弹跳滚动箭头添加到我的网页底部?
- 27. 将特定的按钮添加到滚动的PreferenceScreen的底部
- 28. 将视图添加到滚动视图的底部布局
- 29. 在页面加载时滚动到底部,但将允许滚动顶部
- 30. JScrollpane:当滚动到底部时添加元素
可能重复[\ [iPhone \]如何知道UITableView何时滚动到底部](http://stackoverflow.com/questions/5137943/iphone-how-to-know-when-uitableview-did - 滚动到底部) – 2011-05-16 21:45:14
请在发布之前搜索。搜索你的标题可以发现我已经链接的这个问题,它与Henri给你的答案有相同的信息。 – 2011-05-16 22:50:39
下面是使用Swift的无限UITableView演示:https://github.com/i-schuetz/tableview_infinite它使用异步任务加载数据并显示加载页脚。 – Ixx 2014-06-27 19:45:03