【移動(dòng)應(yīng)用開發(fā)技術(shù)】開源中國(guó)iOS客戶端學(xué)習(xí)-(三)再看協(xié)議與委托_第1頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】開源中國(guó)iOS客戶端學(xué)習(xí)-(三)再看協(xié)議與委托_第2頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】開源中國(guó)iOS客戶端學(xué)習(xí)-(三)再看協(xié)議與委托_第3頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】開源中國(guó)iOS客戶端學(xué)習(xí)-(三)再看協(xié)議與委托_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

【移動(dòng)應(yīng)用開發(fā)技術(shù)】開源中國(guó)iOS客戶端學(xué)習(xí)——(三)再看協(xié)議與委托

iOS里委托與協(xié)議是很重要的一塊,如果理解不好很難區(qū)分協(xié)議與委托到底有什么不一樣,這些東西在開發(fā)中是經(jīng)常遇見的;協(xié)議是類留給外部的一個(gè)接口函數(shù)的集合(一位高手用C++基類來(lái)解釋是,把接口做為參數(shù),回調(diào)基類的函數(shù)時(shí),運(yùn)行時(shí)識(shí)別,調(diào)用了相應(yīng)子類的成員函數(shù));委托是iOS一種設(shè)計(jì)模式,通過委托別的類,來(lái)調(diào)用協(xié)議里的方法,相當(dāng)于一個(gè)回調(diào)過程;使用理解委托與協(xié)議步驟:(1)弄清楚誰(shuí)委托誰(shuí),需要干什么?拿上一篇博客下拉刷新源碼案例分析,(在源碼工程中comment文件夾里)有MessageSystemView這樣一個(gè)類,該類用于用戶的信息所用(比如誰(shuí)給你留言,或者評(píng)論了你某一篇博客),我們也需要刷新獲取最新信息,此處用到下拉刷新第三方類庫(kù)EGORefreshTableHeaderView類委托MessageSystemView類來(lái)實(shí)現(xiàn)這個(gè)特性,這就需要在EGORefreshTableHeaderView類定義一個(gè)協(xié)議對(duì)象delegate。(2)被委托類需要在interface中聲明<XXDelegate>,表示該類要實(shí)現(xiàn)協(xié)議里的方法.MessageSystemView實(shí)現(xiàn)EGORefreshTableHeaderView協(xié)議方法就要遵循EGORefreshTableHeaderDelegate協(xié)議.(3)在被委托類里定義一個(gè)委托類的對(duì)象,將xx.delegate=self,意思是把委托的對(duì)象只想被委托對(duì)象;在EGORefreshTableHeaderView.h文件中EGORefreshTableHeaderView*_refreshHeaderView;在ViewDidLoad中

view.delegate=self;

_refreshHeaderView=view;-(void)viewDidLoad{allCount=0;[superviewDidLoad];if(self.tabTitle){self.tabBarItem.title=self.tabTitle;}//加載固定數(shù)據(jù)imageDownloadsInProgress=[NSMutableDictionarydictionary];comments=[[NSMutableArrayalloc]initWithCapacity:10];[selfreload:YES];//添加的代碼if(_refreshHeaderView==nil){EGORefreshTableHeaderView*view=[[EGORefreshTableHeaderViewalloc]initWithFrame:CGRectMake(0.0f,-320.0f,self.view.frame.size.width,320)];view.delegate=self;[self.tableCommentsaddSubview:view];_refreshHeaderView=view;}[_refreshHeaderViewrefreshLastUpdatedDate];self.tableComments.backgroundColor=[UIColorcolorWithRed:248.0/255.0green:249.0/255.0blue:249.0/255.0alpha:1.0];}(4)在被委托類的實(shí)現(xiàn)文件中調(diào)用協(xié)議方法,這就是實(shí)現(xiàn)委托方法的一個(gè)過程;此處EGORefreshTableHeaderView類對(duì)象委托MessageSystemView類對(duì)象,在MessageSystemView實(shí)現(xiàn)對(duì)EGORefreshTableHeaderView類協(xié)議的調(diào)用;MessageSystemView.m文件實(shí)現(xiàn)委托方法-(void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{[selfreloadTableViewDataSource];[selfrefresh];}-(BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{return_reloading;}-(NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{return[NSDatedate];}當(dāng)然要實(shí)現(xiàn)完整的下拉功能這幾個(gè)委托只是其中一部分,被委托類里還需要有自己的成員函數(shù),在委托方法正在被調(diào)用的時(shí)候觸發(fā)被委托成員函數(shù)方法,在MessageSystemView.h//下拉刷新-(void)refresh;//解析網(wǎng)絡(luò)數(shù)據(jù),讓數(shù)據(jù)顯示到視圖上-(void)reloadTableViewDataSource;//開始加載時(shí)調(diào)用此方法-(void)doneLoadingTableViewData;//完成加載時(shí)調(diào)用此方法#pragma下提刷新-(void)reloadTableViewDataSource{_reloading=YES;}-(void)doneLoadingTableViewData{_reloading=NO;[_refreshHeaderViewegoRefreshScrollViewDataSourceDidFinishedLoading:self.tableComments];}-(void)scrollViewDidScroll:(UIScrollView*)scrollView{[_refreshHeaderViewegoRefreshScrollViewDidScroll:scrollView];}-(void)scrollViewDidEndDragging:(UIScrollView*)scrollViewwillDecelerate:(BOOL)decelerate{[_refreshHeaderViewegoRefreshScrollViewDidEndDragging:scrollView];}-(void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{[selfreloadTableViewDataSource];[selfrefresh];}-(BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{return_reloading;}-(NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{return[NSDatedate];}-(void)refresh{isLoadOver=NO;[selfreload:NO];}效果圖

.h文件里#import<UIKit/UIKit.h>#import"EGORefreshTableHeaderView.h"@interfaceViewController:UIViewController<UIScrollViewDelegate,UITableViewDelegate,UITableViewDataSource,EGORefreshTableHeaderDelegate>{EGORefreshTableHeaderView*_refreshHeaderView;BOOL_reloading;}@property(retain,nonatomic)IBOutletUITableView*tableView;-(void)reloadTableViewDataSource;-(void)doneLoadingTableViewData;@end-(void)viewDidLoad{[superviewDidLoad]; //Doanyadditionalsetupafterloadingtheview,typicallyfromanib.if(_refreshHeaderView==nil){EGORefreshTableHeaderView*view=[[EGORefreshTableHeaderViewalloc]initWithFrame:CGRectMake(0.0f,-self.tableView.frame.size.height,self.view.frame.size.width,self.tableView.frame.size.height)];view.delegate=self;[self.tableViewaddSubview:view];_refreshHeaderView=view;[viewrelease];}[_refreshHeaderViewrefreshLastUpdatedDate];}//重新加載時(shí)調(diào)用-(void)reloadTableViewDataSource{_reloading=YES;}//完成加載時(shí)調(diào)用-(void)doneLoadingTableViewData{_reloading=NO;[_refreshHeaderViewegoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];}#pragmamark-#pragmamarkUIScrollViewDelegateMethods-(void)scrollViewDidScroll:(UIScrollView*)scrollView{[_refreshHeaderViewegoRefreshScrollViewDidScroll:scrollView];}-(void)scrollViewDidEndDragging:(UIScrollView*)scrollViewwillDecelerate:(BOOL)decelerate{[_refreshHeaderViewegoRefreshScrollViewDidEndDragging:scrollView];}#pragmamark-#pragmamarkEGORefreshTableHeaderDelegateMethods-(void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{[selfreloadTableViewDataSource];[selfperformSelector:@selector(doneLoadingTableViewData)withObject:nilafterDelay:3.0];}-(BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{return_reloading;}-(NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{return[NSDatedate];}#pragmamark-#pragmamarkUITableViewDataSource-(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView{return1

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論