iOS代理模式(delegate)的使用


前言:

代理模式是iOS中非常重要的一個模式,iOS SDK中的系統(tǒng)控件幾乎都用到了代理模式。代理模式用來處理事件監(jiān)聽、參數(shù)傳遞功能。?

協(xié)議創(chuàng)建(Protocol):

可手打如下代碼,或者在代碼塊里面搜索"protocol",然后把協(xié)議的代碼拖拽出來

@protocol FullcellDalegate <NSObject>?

@required//遵守協(xié)議必須實(shí)現(xiàn)的方法

-(void)fullcellSelect:(NSIndexPath *)index WithBtnType:(NSInteger)type;?

@optional //遵守協(xié)議 實(shí)現(xiàn)不實(shí)現(xiàn)方法都可以??

@end?

在協(xié)議當(dāng)中,方法的聲明,被@required修飾,那么就準(zhǔn)守這個協(xié)議的類,必須實(shí)現(xiàn)這個方法,否則就會發(fā)出警告。被@optional修飾,那么準(zhǔn)守這個協(xié)議的類,可以實(shí)現(xiàn)這個方法,也可以不實(shí)現(xiàn)這個方法,不實(shí)現(xiàn)編譯器也不會報警告。?

初始化:

@property?(nonatomic, weak) id<FullcellDalegate>delegate;?

代理的初始化要用”weak“修飾,否則會警告?

?代理事件的監(jiān)聽:

?if ([self.delegate?respondsToSelector:@selector(fullcellSelect:WithBtnType:)]) {? ? ? ? [self.delegate?fullcellSelect:self.indexpath?WithBtnType:btn.tag];? ??

}?

方法使用的時候要先判斷方法是否實(shí)現(xiàn),然后才能使用。若方法沒有實(shí)現(xiàn)就使用該方法,會崩潰。?

?遵守協(xié)議:

?@interface?MainVideoController?()<UITableViewDelegate, UITableViewDataSource, ZFPlayerDelegate,?FullcellDalegate>

cell.delegate =?self;?

方法實(shí)現(xiàn):

?-(void)fullcellSelect:(NSIndexPath *)index WithBtnType:(NSInteger)type

{?}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容