- (void)viewDidLoad {
【超級viewDidLoad】;
//集成刷新控制
[自我設置刷新];
}
/**
*集成下拉刷新
*/
-(void)設置刷新
{
//1.添加刷新控件
UIRefreshControl * control =[[UIRefreshControl alloc]init];
[control add target:self action:@ selector(refreshStateChange:)for control events:UIControlEventValueChanged];
[self . table view addSubview:control];
//2.立即進入刷新狀態不會觸發UIControlEventValueChanged事件。
[控制開始刷新];
// 3.加載數據
【自我刷新狀態變化:控制】;
}
2.接下來,我們將實現refreshStateChange方法,該方法顯示數據並關閉下拉刷新。
/**
* UIRefreshControl進入刷新狀態:加載最新數據。
*/
-(void)refreshStateChange:(UIRefreshControl *)控件
{
// 3.發送請求
AFHTTPRequestOperationManager * mgr =[AFHTTPRequestOperationManager manager];
[mgr get:@ "/2/status/public _ timeline . JSON "參數:nil success:^(afhttprequestoperation * operation,NSDictionary *responseObject){
//1.獲取數據、處理數據並將數據傳遞給tableView,例如:
//將最新的微博數據添加到總組前面。
//ns range range = nsmakerage(0,newstatuses . count);
//NSIndexSet * set =[NSIndexSet indexSetWithIndexesInRange:range];
//[self . status insert objects:newStatuses at indexes:set];
//2.刷新表格
[self . table view reload data];
// 3.結束刷新
[控件結束刷新];
} failure:^(afhttprequestoperation *操作,nserror *錯誤){
//結束刷新刷新。為了避免網絡加載失敗,總是顯示刷新狀態錯誤。
[控件結束刷新];
}];
}
上拉刷新
上拉刷新通常用於尋呼請求。拉到底部後,自動加載下壹頁。我們以加載新浪微博數據為例。
首先,因為下載和加載更多的數據是壹個不變的布局控件,我們將使用xib來實現它。
HWLoadMoreFooter.h
#導入& ltui kit/ui kit . h & gt;
@ interface HWLoadMoreFooter:ui view
+(instancetype)頁腳;
@end
HWLoadMoreFooter.m
#import "HWLoadMoreFooter.h "
@實現HWLoadMoreFooter
+(實例類型)頁腳
{
return[[[ns bundle main bundle]loadNibNamed:@ " HWLoadMoreFooter " owner:nil options:nil]last object];
}
@end
接下來,我們設置壹個名為HWLoadMoreFooter的xib。
接下來,您需要設置以下三個位置:
然後在框中拖動壹個標簽,並將標簽設置為填充整個視圖。
最後,單擊下面的紅框來更新框架。
xib建好之後,我們來實現上拉刷新代碼。
2.實現代碼。
1.在TabelView中加載時,首先加載控件。
- (void)viewDidLoad {
【超級viewDidLoad】;
//集成下拉刷新控件
[self setup prefresh];
//集成上拉刷新控制
[self setup down refresh];
}
2.集成上拉刷新方法
/**
*集成上拉刷新
*/
-(void)setupDownRefresh
{
HWLoadMoreFooter * footer =[HWLoadMoreFooter];
footer.hidden = YES
self . table view . tablefooterview = footer;
}
3.異步數據請求方法
- (void)加載更多狀態
{
// 1.請求管理器
AFHTTPRequestOperationManager * mgr =[AFHTTPRequestOperationManager manager];
// 2.拼接請求參數
HW account * account =[HW account tool account];
NSMutableDictionary * params =[NSMutableDictionary字典];
params[@ " access _ token "]= account . access _ token;
//拿出最後壹條微博(最新的微博,ID最大的微博)。
HW status * last status =[self . status last object];
if (lastStatus) {
//如果指定該參數,則返回ID小於等於max_id的微博,默認值為0。
// id數據壹般比較大。如果壹般轉換成整數,最好是long long類型。
long long maxId = last status . idstr . longlong value-1;
params[@ " max _ id "]= @(maxId);
}
// 3.發送請求
[mgr get:@ "/2/status/friends _ timeline . JSON "參數:params success:^(afhttprequestoperation * operation,NSDictionary *responseObject) {
//將“微博字典”數組轉換為“微博模型”數組。
NSArray * new status =[HW status objectArrayWithKeyValuesArray:response object[@ " status "]];
//在總組末尾添加更多微博數據。
[self . status addObjectsFromArray:newStatuses];
//刷新表格
[self . table view reload data];
//結束刷新(隱藏頁腳)
self . table view . tablefooterview . hidden = YES;
} failure:^(afhttprequestoperation *操作,nserror *錯誤){
HWLog(@“請求失敗-%@”,錯誤);
//結束刷新
self . table view . tablefooterview . hidden = YES;
}];
}
4.實現scrollViewDidScroll
-(void)scroll viewdidscroll:(ui scroll view *)scroll view
{
//scroll view = = self . table view = = self . view
//如果tableView中沒有數據,直接返回。
if(self . status . count = = 0 | | self . table view . tablefooterview . is hidden = = NO)返回;
CG float offsetY = scroll view . content offset . y;
//最後壹個單元格完全顯示時contentOffset的y值。
CG float judgeOffsetY = scroll view . contentsize . height+scroll view . content inset . bottom-scroll view . height-self . table view . tablefooterview . height;
if(off sety & gt;= judgeOffsetY) {//最後壹個單元格完全進入視野。
//顯示頁腳
self . table view . tablefooterview . hidden = NO;
//加載更多微博數據。
[self loadMoreStatus];
}
}