iOS 上啦下拉刷新

在iOS開(kāi)發(fā)中翁授,我們經(jīng)常要用到下拉刷新和上拉刷新來(lái)加載新的數(shù)據(jù)残拐,當(dāng)前這也適合分頁(yè)涎拉。iOS原生就帶有該方法瑞侮,下面就iOS自帶的下拉刷新方法來(lái)簡(jiǎn)單操作。

上拉刷新

1鼓拧、在TableView里半火,一打開(kāi)軟件,我們就調(diào)用下拉刷新事件季俩。


24- (void)viewDidLoad {

[superviewDidLoad];

// 集成刷新控件

[selfsetupRefresh];

}

/**

*? 集成下拉刷新

*/

-(void)setupRefresh

{

//1.添加刷新控件

UIRefreshControl *control=[[UIRefreshControl alloc]init];

[control addTarget:selfaction:@selector(refreshStateChange:) forControlEvents:UIControlEventValueChanged];

[self.tableView addSubview:control];

//2.馬上進(jìn)入刷新?tīng)顟B(tài)钮糖,并不會(huì)觸發(fā)UIControlEventValueChanged事件

[control beginRefreshing];

// 3.加載數(shù)據(jù)

[selfrefreshStateChange:control];

}

2、接下來(lái)酌住,我們就要實(shí)現(xiàn)?refreshStateChange 這個(gè)方法店归,在里面顯示數(shù)據(jù)和關(guān)閉下拉刷新。


*? UIRefreshControl進(jìn)入刷新?tīng)顟B(tài):加載最新的數(shù)據(jù)

*/

-(void)refreshStateChange:(UIRefreshControl *)control

{

// 3.發(fā)送請(qǐng)求

AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

[mgr GET:@"https://api.weibo.com/2/statuses/public_timeline.json"parameters:nilsuccess:^(AFHTTPRequestOperation *operation,NSDictionary*responseObject){

//1.獲取數(shù)據(jù)酪我,處理數(shù)據(jù)消痛,傳遞數(shù)據(jù)給tableView,如:

// 將最新的微博數(shù)據(jù),添加到總數(shù)組的最前面

//??????? NSRange range = NSMakeRange(0, newStatuses.count);

//??????? NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:range];

//??????? [self.statuses insertObjects:newStatuses atIndexes:set];

//2.刷新表格

[self.tableView reloadData];

// 3. 結(jié)束刷新

[control endRefreshing];

} failure:^(AFHTTPRequestOperation *operation,NSError*error) {

// 結(jié)束刷新刷新 都哭,為了避免網(wǎng)絡(luò)加載失敗秩伞,一直顯示刷新?tīng)顟B(tài)的錯(cuò)誤

[control endRefreshing];

}];

}

上拉刷新

上拉刷新,一般用于分頁(yè)請(qǐng)求欺矫,拉到底后稠歉,自動(dòng)加載下一頁(yè)。下面就拿加載新浪微博數(shù)據(jù)為例汇陆。

一怒炸、由于下載加載更多數(shù)據(jù),是一個(gè)不變的布局控件毡代,我們就用xib來(lái)實(shí)現(xiàn)阅羹。

HWLoadMoreFooter.h


5#import

@interfaceHWLoadMoreFooter : UIView

+(instancetype)footer;

@end

HWLoadMoreFooter.m


10#import "HWLoadMoreFooter.h"

@implementationHWLoadMoreFooter

+(instancetype)footer

{

return[[[NSBundlemainBundle] loadNibNamed:@"HWLoadMoreFooter"owner:niloptions:nil] lastObject];

}

@end

接著,我們建立一個(gè)名為HWLoadMoreFooter的xib

接下來(lái)教寂,需要設(shè)置下面三個(gè)地方:

接著在框里拖拉一個(gè)Label捏鱼,設(shè)置Label為填充整個(gè)view

最后,點(diǎn)擊下圖紅色框酪耕,Update Frames

xib建好之后导梆,下面我們來(lái)實(shí)現(xiàn)上拉刷新的代碼

二.實(shí)現(xiàn)代碼。

1.在TabelView中加載時(shí),先加載該控件


10- (void)viewDidLoad {

[superviewDidLoad];

// 集成下拉刷新控件

[selfsetupUpRefresh];

// 集成上拉刷新控件

[selfsetupDownRefresh];

}

2.集成上拉刷新方法

/**

*? 集成上拉刷新

*/

-(void)setupDownRefresh

{

HWLoadMoreFooter *footer = [HWLoadMoreFooter footer];

footer.hidden =YES;

self.tableView.tableFooterView = footer;

}

3.異步請(qǐng)求數(shù)據(jù)方法


39- (void)loadMoreStatus

{

// 1.請(qǐng)求管理者

AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

// 2.拼接請(qǐng)求參數(shù)

HWAccount *account = [HWAccountTool account];

NSMutableDictionary*params = [NSMutableDictionarydictionary];

params[@"access_token"] = account.access_token;

// 取出最后面的微博(最新的微博看尼,ID最大的微博)

HWStatus *lastStatus = [self.statuses lastObject];

if(lastStatus) {

// 若指定此參數(shù)递鹉,則返回ID小于或等于max_id的微博,默認(rèn)為0藏斩。

// id這種數(shù)據(jù)一般都是比較大的躏结,一般轉(zhuǎn)成整數(shù)的話(huà),最好是long long類(lèi)型

longlongmaxId = lastStatus.idstr.longLongValue - 1;

params[@"max_id"] = @(maxId);

}

// 3.發(fā)送請(qǐng)求

[mgr GET:@"https://api.weibo.com/2/statuses/friends_timeline.json"parameters:params success:^(AFHTTPRequestOperation *operation,NSDictionary*responseObject) {

// 將 "微博字典"數(shù)組 轉(zhuǎn)為 "微博模型"數(shù)組

NSArray*newStatuses = [HWStatus objectArrayWithKeyValuesArray:responseObject[@"statuses"]];

// 將更多的微博數(shù)據(jù)狰域,添加到總數(shù)組的最后面

[self.statuses addObjectsFromArray:newStatuses];

// 刷新表格

[self.tableView reloadData];

// 結(jié)束刷新(隱藏footer)

self.tableView.tableFooterView.hidden =YES;

} failure:^(AFHTTPRequestOperation *operation,NSError*error) {

HWLog(@"請(qǐng)求失敗-%@", error);

// 結(jié)束刷新

self.tableView.tableFooterView.hidden =YES;

}];

}

4.實(shí)現(xiàn)scrollViewDidScroll


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

{

//??? scrollView == self.tableView == self.view

// 如果tableView還沒(méi)有數(shù)據(jù)媳拴,就直接返回

if(self.statuses.count == 0 ||self.tableView.tableFooterView.isHidden ==NO)return;

CGFloat offsetY = scrollView.contentOffset.y;

// 當(dāng)最后一個(gè)cell完全顯示在眼前時(shí),contentOffset的y值

CGFloat judgeOffsetY = scrollView.contentSize.height + scrollView.contentInset.bottom - scrollView.height -self.tableView.tableFooterView.height;

if(offsetY >= judgeOffsetY) {// 最后一個(gè)cell完全進(jìn)入視野范圍內(nèi)

// 顯示footer

self.tableView.tableFooterView.hidden =NO;

// 加載更多的微博數(shù)據(jù)

[selfloadMoreStatus];

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末兆览,一起剝皮案震驚了整個(gè)濱河市屈溉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抬探,老刑警劉巖子巾,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異驶睦,居然都是意外死亡砰左,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)场航,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)缠导,“玉大人,你說(shuō)我怎么就攤上這事溉痢∑г欤” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵孩饼,是天一觀(guān)的道長(zhǎng)髓削。 經(jīng)常有香客問(wèn)我,道長(zhǎng)镀娶,這世上最難降的妖魔是什么立膛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮梯码,結(jié)果婚禮上宝泵,老公的妹妹穿的比我還像新娘。我一直安慰自己轩娶,他們只是感情好儿奶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著鳄抒,像睡著了一般闯捎。 火紅的嫁衣襯著肌膚如雪椰弊。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天瓤鼻,我揣著相機(jī)與錄音秉版,去河邊找鬼。 笑死娱仔,一個(gè)胖子當(dāng)著我的面吹牛沐飘,可吹牛的內(nèi)容都是我干的游桩。 我是一名探鬼主播牲迫,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼借卧!你這毒婦竟也來(lái)了盹憎?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤铐刘,失蹤者是張志新(化名)和其女友劉穎陪每,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體镰吵,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡檩禾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疤祭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盼产。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖勺馆,靈堂內(nèi)的尸體忽然破棺而出戏售,到底是詐尸還是另有隱情,我是刑警寧澤草穆,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布灌灾,位于F島的核電站,受9級(jí)特大地震影響悲柱,放射性物質(zhì)發(fā)生泄漏锋喜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一豌鸡、第九天 我趴在偏房一處隱蔽的房頂上張望嘿般。 院中可真熱鬧,春花似錦直颅、人聲如沸博个。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盆佣。三九已至往堡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間共耍,已是汗流浹背虑灰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痹兜,地道東北人穆咐。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像字旭,于是被迫代替她去往敵國(guó)和親对湃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容