使用RefreshBar實現上拉刷新表格

轉載:http://blog.csdn.net/kmyhy/article/details/7522299


大名鼎鼎的egoTableViewPullRefresh想必大家都聽說過。它是一個下拉刷新表格控件。當你將TableView向下拉到一定位置,表視圖單元格將自動刷新數據。但是這次我們想介紹的不是egoTableViewPullRefresh,我們將介紹一個自己實現的RefreshBar控件,這個控件可以用在普通的TableView中,使我們能夠在UITableView上實現上拉刷新的功能。因爲我一直覺得上拉刷新要比下拉刷新的用戶體驗要好。因爲人的閱讀習慣是從上往下的,而你滾動表格時,也是“上拉”的動作,當你拉到當前表格的最後一行時,你剛好可以看到RefreshBar控件顯示出來,此時只需要再次上拉(而不需要象“下拉”刷新一樣要回到表格頭部)就可加載更多行。

這是RefreshBar的項目地址:

https://github.com/kmyhy/RefreshBar

一、RefreshBar的特性

RefreshBar是一個“上拉刷新”手勢識別的組件。可以將RefreshBar用於你的UITableView上。它具有以下功能:

1、“上拉”時提示


2、繼續上拉,識別爲“刷新”手勢


3、釋放手指,開始刷新。在刷新過程中,動畫被禁止


4、刷新完畢,顯示刷新日期。無數據進行提示


二、將RefreshBar加到項目中

你下載解壓後,可以看到兩個目錄:RefreshBar和ProgressiveRefreshTableApp。分別對應RefreshBar的源文件目錄和它的demo項目,你可以直接運行demo,學習如何使用RefreshBar。這是完全開源和免費的,如果你要在自己的項目中使用它,把RefreshBar目錄整個複製到你的項目中即可,包括以下5個文件:

§  RefreshBar.xib

§  RefreshBar.m

§  RefreshBar.h

§  grayArrow.png

§  whiteArrow.png

 

二、初始化

如果要在你的View Controller中使用RefreshBar,你需要在viewDidLoad中初始化它,並將它添加到UITableView的下方:

_refreshBar=[[RefreshBaralloc]init];

    [_refreshBarsetFrame:CGRectMake(0.0f,

                               0.0f + self.tableView.frame.size.height,

                               self.view.frame.size.width,

                               _refreshBar.frame.size.height)];

[self.tableViewaddSubview:_refreshBar];

三、實現委託

要讓RefreshBar能正常工作,你必需在初始化它後設置它的delegate屬性:

_refreshBar.delegate=self;

委託對象(即View Controller)總共需要實現兩個委託協議:

RefreshBarDelegate,UIScrollViewDelegate

其中,UIScrollViewDelegate協議方法的實現最爲簡單,它們都調用了RefreshBar的方法:

#pragma mark -ScrollView delegate

 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

    [_refreshBarscrollViewDidScroll:scrollView];

}

 

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollViewwillDecelerate:(BOOL)decelerate{

    [_refreshBarscrollViewDidEndDragging:scrollView];

}

然後是RefreshBarDelegate協議。這個協議定義了4個方法,都是必需實現的:

-(void)beginDataSourceLoading:(RefreshBar*)refreshBar;

-(BOOL)hasMoreData;

-(BOOL)isDataSourceLoading;

-(void)endDataSourceLoading:(RefreshBar*)refreshBar;

beginDataSourceLoading:方法在RefreshBar感知到一個有效的“上拉刷新”手勢時調用,這個方法中,你應該加載新的行數據。

如果這個過程是耗時的,你還應該設置一些標記(標識過程是否結束)。

在過程結束時,應該手動調用RefreshBar的dataSourceDidLoad:方法,這個方法僅僅是通知RefreshBar,數據加載的過程已經結束了。

例如:

-(void)beginDataSourceLoading:(RefreshBar *)refreshBar{

    _loading=YES;

loadedCount++;

     _loading=NO;

    // call the refresh bar, data loadingis end

    [_refreshBardataSourceDidLoad:self.tableView];

}

hasMoreData方法是RefreshBar用於詢問delegate對象是否還有新的行數據的方法。例如我們僅僅通過刷新動作的次數來決定是否還有多餘的數據。例如,如果加載次數超過2次,我們就認爲不再有新的行數據:

-(BOOL)hasMoreData{

    returnloadedCount<3;

}

isDataSourceLoading方法是RefreshBar用於詢問delegate對象是否數據加載過程已經結束的方法。在這個方法中,我們可以通過簡單的判斷標誌變量來決定是否加載過程已結束:

-(BOOL)isDataSourceLoading{

    return [selfhasMoreData] && _loading;

}

endDataSouceLoading方法允許你在數據加載完成時做一些事情,比如重新刷新TableView:

-(void)endDataSourceLoading:(RefreshBar *)refreshBar{

    [self.tableViewreloadData];

}

四、demo程序

壓縮包中包含demo,即ProgressiveRefreshTableApp目錄。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章