EGOTableViewPullRefresh下拉更新

在很久之前 Twitter一個APP實現了這個下拉式更新的方式。

可是因為沒有對外發表,網路一堆人在詢問,這時github上有個人實現了這個方法。

把他叫做EGOTableViewPullRefresh,之後Facebook App還偷拿去用,因此扯上官司。

廢話不多講,這次當然不是要講如何去用這個Library,而是實現類似Facebook一登入後,取代著螢幕中間有個黑方塊的等待視窗,而是用預設下拉式的更新。

如圖

要實現這個方法,我們需要改進一點EGOTableViewPullRefresh原本的Code

在ViewDidload中,官方例子有下列Code

1
2
3
4
5
6
7
8
9
10
if (_refreshHeaderView == nil) {
EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.rearTableView.bounds.size.height,self.view.frame.size.width, self.rearTableView.bounds.size.height)];
view.delegate = self;
[self.rearTableView addSubview:view];
_refreshHeaderView = view;
[view release];
}
[_refreshHeaderView refreshLastUpdatedDate];

再此Code中 我們需先改寫讓一個tableview一進ViewDidload中先下拉到原本EGO預設的更新長度(預設40 height)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (_refreshHeaderView == nil) {
_refreshHeaderView = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.aTableView.bounds.size.height, 320.0f, self.aTableView.bounds.size.height)];
_refreshHeaderView.backgroundColor = [UIColor colorWithWhite:0.812 alpha:1.000];
_refreshHeaderView.delegate = self;
[self.aTableView addSubview:_refreshHeaderView];
self.aTableView.showsVerticalScrollIndicator = YES;
}
[self EnterReloadData];
[_refreshHeaderView setState:EGOOPullRefreshLoading];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.2];
self.aTableView.contentInset = UIEdgeInsetsMake(40.0f, 0.0f, 0.0f, 0.0f);
[UIView commitAnimations];

因為我下載的EGO沒有把 State這個屬性設成property 所以我們需自行在

EGORefreshTableHeaderView.h 中 加入 @property(nonatomic,assign) EGOPullRefreshState state;

然後再m檔中補上@synthesize state=_state;

上面的程式碼主要就是把 把tableview往下方移動到x軸40的地方

然後去setState 把狀態設成Loading。

我們需自行再加入一個Method

1
2
3
4
5
-(void)EnterReloadData
{
[self reloadTableViewDataSource];
}

因為EGO delegate的關係,會去自動偵測你拉到40後會去call - (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view 這個Delegate Method

這個Method又會去Call reloadTableViewDataSource 所以我們做一個Method叫EnterReloadData 自行去Call

其他方法就跟原本用法差不多了,因為之前改的東西有點多,應該就是這些,有遺漏的請指教。