當用戶滾動到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