2013-08-01 61 views
1

我試圖找出在UItableView中滑動到底部時處理分頁或「加載更多...」的最佳方法。 我從Web服務加載這些數據,這非常靈活,給我一個pagesize和page參數。頁面大小定義了每次拉回的結果數量,而頁面參數定義了搜索結果組,例如:如何在滾動到表底部時添加「加載更多」頁面

page = 1(返回結果1-10)。

頁= 2(返回結果11-20)

每一次,當向下滾動到下,我請求服務器1時間和服務器會給我1頁(1,2,3,4 .. ..)和結果。 我試圖加載這樣

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    CGFloat height = scrollView.frame.size.height; 

    CGFloat contentYoffset = scrollView.contentOffset.y; 

    CGFloat distanceFromBottom = scrollView.contentSize.height - contentYoffset; 
    if(distanceFromBottom < height) 
    { 
     //to do something 
     [self.viewController getPics]; 
    } 

} 

我真的不知道該如何處理這個。任何幫助都會很棒。提前致謝。

+0

如果你不喜歡重新發明輪子,看看開源https://github.com/samvermette/SVPullToRefresh,這將給你無限1行代碼滾動。或者查看文件UIScrollView + SVInfiniteScrolling.m,它會告訴你這個實現。 –

回答

0

您的解決方案存在一些缺陷:

  • 首先,你不應該使用scrollViewDidScroll,因爲它是不斷地一直滾動解僱。對於這種功能,我一直傾向於選擇scrollViewDidEndDecelerating,這樣每個滾動手勢只會觸發一次。

  • 其次,您目前正在驗證用戶是否在scrollView.frame.size.height或更少從底部重新加載。因此,如果您的scrollView是帶有導航欄和狀態欄的全屏幕,則iPhone 4上的此值將爲416px,iPhone 5上的值爲664px--這非常多。我勸你還是比較distanceFromBottom這低得多,硬編碼值,如果用戶滾動滾動視圖的底部,如100

+0

需要回答。 是的,我知道,但當我滾動,而不是在底部,它加載,我滾動,我加載...,所以,我想當我滾動到底部,我加載。 你有一些例子嗎? P/S:對不起我的英語。 – user2575045

1

下面的代碼片斷將檢測。
您可以調用該方法從if語句正文中的服務器(異步)獲取更多數據。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    if ([scrollView contentOffset].y == [scrollView contentSize].height - [scrollView frame].size.height) { 
     // The user did scroll to the bottom of the scroll view 
    } 
} 
0

Here is a demo(感謝原作者!),您可以輕鬆地將它集成到您​​自己的項目中!

用法:

_footer = [MJRefreshFooterView footer]; 
_footer.scrollView = self.tableView; 
_footer.beginRefreshingBlock = ^(MJRefreshBaseView *refreshView) { 
    // Load more data 
}; 
相關問題