日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

iOS 下拉刷新

發(fā)布時(shí)間:2024/4/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS 下拉刷新 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

移動(dòng)應(yīng)用開(kāi)發(fā)中有這么一種場(chǎng)景,就是在列表中顯示的數(shù)據(jù)刷新,有點(diǎn)擊刷新按鈕刷新的,也有現(xiàn)在最流行的由Twitter首先推出的下拉刷新功能,在IOS中,使用下拉刷新更新UITableView中的數(shù)據(jù)也用的非常多,最典型的就是新浪微博的客戶端,使用下拉的形式來(lái)更新最新的微博信息。

在Android開(kāi)發(fā)中,有相應(yīng)的開(kāi)源項(xiàng)目來(lái)實(shí)現(xiàn)下拉刷新,這里主要講如何在IOS中實(shí)現(xiàn)下拉刷新的功能,我們用到一個(gè)EGOTableViewPullRefresh的開(kāi)源項(xiàng)目來(lái)實(shí)現(xiàn)這個(gè)功能,收先到這里下載源碼,下載完成后里面有個(gè)Demo是可以直接運(yùn)行的Xcode工程,然后就是這個(gè)開(kāi)源項(xiàng)目的源碼,學(xué)習(xí)如何使用可以參照Demo,我以下實(shí)現(xiàn)的這個(gè)是在Demo的基礎(chǔ)上進(jìn)行了一定的修改,主要是支持了中英文版本,原生的只支持英文,我添加了中英文支持,然后就是刷新時(shí)間的格式,修改后的格式更直觀,原生的是使用SDK自帶的時(shí)間格式,而我改成了自定義的形式。

首先來(lái)看看工程目錄結(jié)構(gòu):


加載源碼到工程中的方式我就不贅述了,然后我新建了一個(gè)MainViewController來(lái)作為主界面控制器,配有相應(yīng)的xib文件。EGOTableViewPullRefresh文件夾下是開(kāi)源項(xiàng)目的源碼,Supporting Files分組下的Localizable.strings是做國(guó)際化的文件,支持中英文,這個(gè)文件就是支持下拉刷新中英文顯示的國(guó)際化資源文件。

國(guó)際化是指隨著手機(jī)語(yǔ)言的切換,軟件的文字語(yǔ)言也隨著切換,我這里只支持中英文,所以只建了一個(gè)English和一個(gè)Chinese的文件。關(guān)于如何在IOS中使用國(guó)際化,首先在工程中新建文件,選擇Resouces然后選擇Strings File類型的文件,創(chuàng)建成功后,選中該文件,在右邊屬性選擇器中添加語(yǔ)言支持,如下圖:


點(diǎn)擊+號(hào)選擇相應(yīng)的語(yǔ)言就行,完成后就出現(xiàn)了兩個(gè)子文件,分別對(duì)應(yīng)中文和英文,在這些文件里面是以鍵值對(duì)的方式來(lái)標(biāo)示需要國(guó)際化的內(nèi)容:

英文:

"loading"?=?"Loading...";

中文:

"loading"?=?"加載中...";

左邊是鍵,右邊是值,注意一定要以“分號(hào)”結(jié)尾,否則無(wú)法識(shí)別該鍵值對(duì)。

在代碼中的使用方式:

NSString?*loadingString =?NSLocalizedString(@"loading",?@"");

第一個(gè)參數(shù)是獲取內(nèi)容的鍵,第二個(gè)是如果找不到該鍵對(duì)應(yīng)的值,則取第二個(gè)參數(shù)對(duì)應(yīng)的默認(rèn)值。
在Android中,也是使用兩個(gè)strings.xml文件來(lái)進(jìn)行國(guó)際化,相比Android,IOS中國(guó)際化文件要精簡(jiǎn)些。

接下來(lái)就看如何使用該下拉刷新的開(kāi)源項(xiàng)目,先看看最后實(shí)現(xiàn)的效果:

? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ??

打開(kāi)MainViewController.xib文件然后拖入一個(gè)UITableViewController并連接DataSource和Delegate,然后在MainViewController.h文件中聲明UITableView的協(xié)議,接下來(lái)上代碼,代碼中有詳細(xì)的注釋說(shuō)明。

[cpp]?view plaincopy
  • <span?style="font-family:Comic?Sans?MS;font-size:18px;">#import?<UIKit/UIKit.h>??
  • #import?"EGORefreshTableHeaderView.h"??
  • ??
  • @interface?MainViewController?:?UITableViewController<UITableViewDelegate,UITableViewDataSource,EGORefreshTableHeaderDelegate>??
  • {??
  • ????EGORefreshTableHeaderView?*_refreshTableView;??
  • ????BOOL?_reloading;??
  • }??
  • ??
  • @property?(strong,nonatomic)?NSArray?*array;??
  • ??
  • //開(kāi)始重新加載時(shí)調(diào)用的方法??
  • -?(void)reloadTableViewDataSource;??
  • //完成加載時(shí)調(diào)用的方法??
  • -?(void)doneLoadingTableViewData;??
  • ??
  • @end</span>??

  • [cpp]?view plaincopy
  • #import?"MainViewController.h"??
  • ??
  • @interface?MainViewController?()??
  • ??
  • @end??
  • ??
  • @implementation?MainViewController??
  • @synthesize?array?=?_array;??
  • ??
  • #pragma?mark?-??
  • #pragma?mark?View?life?cycle??
  • -(void)viewDidLoad??
  • {??
  • ????[super?viewDidLoad];??
  • ??????
  • ????//設(shè)置導(dǎo)航條標(biāo)題??
  • ????self.navigationItem.title?=?@"Pull?Refresh";??
  • ??????
  • ????if?(_refreshTableView?==?nil)?{??
  • ????????//初始化下拉刷新控件??
  • ????????EGORefreshTableHeaderView?*refreshView?=?[[EGORefreshTableHeaderView?alloc]?initWithFrame:CGRectMake(0.0f,?0.0f?-?self.tableView.bounds.size.height,?self.view.frame.size.width,?self.tableView.bounds.size.height)];??
  • ????????refreshView.delegate?=?self;??
  • ????????//將下拉刷新控件作為子控件添加到UITableView中??
  • ????????[self.tableView?addSubview:refreshView];??
  • ????????_refreshTableView?=?refreshView;??
  • ????}??
  • ??????
  • ????//初始化用于填充表格的數(shù)據(jù)??
  • ????NSArray?*dataArray?=?[NSArray?arrayWithObjects:@"Ryan",@"Vivi",?nil];??
  • ????self.array?=?dataArray;??
  • ??????
  • ????//重新加載表格數(shù)據(jù)??
  • ????[self.tableView?reloadData];??
  • ??????
  • }??
  • ??
  • -(void)viewDidUnload??
  • {??
  • ????[super?viewDidUnload];??
  • ????_refreshTableView?=?nil;??
  • }??
  • ??
  • -?(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation??
  • {??
  • ????return?(interfaceOrientation?==?UIInterfaceOrientationPortrait);??
  • }??
  • ??
  • #?pragma?mark?-??
  • #?pragma?mark?UITableViewDataSource?Methods??
  • -(NSInteger)numberOfSectionsInTableView:(UITableView?*)tableView??
  • {??
  • ????return?10;??
  • }??
  • ??
  • -(NSInteger)tableView:(UITableView?*)tableView?numberOfRowsInSection:(NSInteger)section??
  • {??
  • ????return?[self.array?count];??
  • }??
  • ??
  • //帶頭標(biāo)題的表格設(shè)置標(biāo)題方法??
  • -(NSString?*)tableView:(UITableView?*)tableView?titleForHeaderInSection:(NSInteger)section??
  • {??
  • ????return?[NSString?stringWithFormat:@"Title?%d",section?+?1];??
  • }??
  • ??
  • -(UITableViewCell?*)tableView:(UITableView?*)tableView?cellForRowAtIndexPath:(NSIndexPath?*)indexPath??
  • {??
  • ????static?NSString?*CellIdentifier?=?@"CellIdentifier";??
  • ????UITableViewCell?*cell?=?[tableView?dequeueReusableCellWithIdentifier:CellIdentifier];??
  • ??????
  • ????if?(!cell)?{??
  • ????????cell?=?[[UITableViewCell?alloc]?initWithStyle:UITableViewCellStyleDefault?reuseIdentifier:CellIdentifier];??
  • ????}??
  • ??????
  • ????cell.textLabel.text?=?[self.array?objectAtIndex:indexPath.row];??
  • ??????
  • ????return?cell;??
  • }??
  • ??
  • #pragma?mark?-??
  • #pragma?mark?Data?Source?Loading?/?Reloading?Methods??
  • //開(kāi)始重新加載時(shí)調(diào)用的方法??
  • -?(void)reloadTableViewDataSource{??
  • ????_reloading?=?YES;??
  • ????//開(kāi)始刷新后執(zhí)行后臺(tái)線程,在此之前可以開(kāi)啟HUD或其他對(duì)UI進(jìn)行阻塞??
  • ????[NSThread?detachNewThreadSelector:@selector(doInBackground)?toTarget:self?withObject:nil];??
  • }??
  • ???????
  • //完成加載時(shí)調(diào)用的方法??
  • -?(void)doneLoadingTableViewData{??
  • ????NSLog(@"doneLoadingTableViewData");??
  • ??????
  • ????_reloading?=?NO;??
  • ????[_refreshTableView?egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];??????
  • ????//刷新表格內(nèi)容??
  • ????[self.tableView?reloadData];??
  • }??
  • ??
  • #pragma?mark?-??
  • #pragma?mark?Background?operation??
  • //這個(gè)方法運(yùn)行于子線程中,完成獲取刷新數(shù)據(jù)的操作??
  • -(void)doInBackground??
  • {??
  • ????NSLog(@"doInBackground");??
  • ??????
  • ????NSArray?*dataArray2?=?[NSArray?arrayWithObjects:@"Ryan2",@"Vivi2",?nil];??
  • ????self.array?=?dataArray2;??
  • ????[NSThread?sleepForTimeInterval:3];??
  • ??????
  • ????//后臺(tái)操作線程執(zhí)行完后,到主線程更新UI??
  • ????[self?performSelectorOnMainThread:@selector(doneLoadingTableViewData)?withObject:nil?waitUntilDone:YES];??
  • }??
  • ??
  • ??
  • #pragma?mark?-??
  • #pragma?mark?EGORefreshTableHeaderDelegate?Methods??
  • //下拉被觸發(fā)調(diào)用的委托方法??
  • -(void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView?*)view??
  • {??
  • ????[self?reloadTableViewDataSource];??
  • }??
  • ??
  • //返回當(dāng)前是刷新還是無(wú)刷新?tīng)顟B(tài)??
  • -(BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView?*)view??
  • {??
  • ????return?_reloading;??
  • }??
  • ??
  • //返回刷新時(shí)間的回調(diào)方法??
  • -(NSDate?*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView?*)view??
  • {??
  • ????return?[NSDate?date];??
  • }??
  • ??
  • #pragma?mark?-???
  • #pragma?mark?UIScrollViewDelegate?Methods??
  • //滾動(dòng)控件的委托方法??
  • -(void)scrollViewDidScroll:(UIScrollView?*)scrollView??
  • {??
  • ????[_refreshTableView?egoRefreshScrollViewDidScroll:scrollView];??
  • }??
  • ??
  • -(void)scrollViewDidEndDragging:(UIScrollView?*)scrollView?willDecelerate:(BOOL)decelerate??
  • {??
  • ????[_refreshTableView?egoRefreshScrollViewDidEndDragging:scrollView];??
  • }??
  • ??
  • @end ?
  • 轉(zhuǎn)載于:https://www.cnblogs.com/yuhaojishuboke/p/5043106.html

    總結(jié)

    以上是生活随笔為你收集整理的iOS 下拉刷新的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。