前言:
代理模式是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
{?}