前言: 代理模式是iOS中非常重要的一個模式,iOS SDK中的系統控制項幾乎都用到了代理模式。代理模式用來處理事件監聽、參數傳遞功能。 協議創建(Protocol): 可手打如下代碼,或者在代碼塊裡面搜索"protocol",然後把協議的代碼拖拽出來 @protocol FullcellDalega ...
前言:
代理模式是iOS中非常重要的一個模式,iOS SDK中的系統控制項幾乎都用到了代理模式。代理模式用來處理事件監聽、參數傳遞功能。
協議創建(Protocol):
可手打如下代碼,或者在代碼塊裡面搜索"protocol",然後把協議的代碼拖拽出來
@protocol FullcellDalegate <NSObject>
@required//遵守協議必須實現的方法
-(void)fullcellSelect:(NSIndexPath *)index WithBtnType:(NSInteger)type;
@optional //遵守協議 實現不實現方法都可以
@end
在協議當中,方法的聲明,被@required修飾,那麼就準守這個協議的類,必須實現這個方法,否則就會發出警告。
被@optional修飾,那麼準守這個協議的類,可以實現這個方法,也可以不實現這個方法,不實現編譯器也不會報警告。
初始化:
@property (nonatomic, weak) id<FullcellDalegate>delegate;
代理的初始化要用”weak“修飾,否則會警告
代理事件的監聽:
if ([self.delegate respondsToSelector:@selector(fullcellSelect:WithBtnType:)]) {
[self.delegate fullcellSelect:self.indexpath WithBtnType:btn.tag];
}
方法使用的時候要先判斷方法是否實現,然後才能使用。若方法沒有實現就使用該方法,會崩潰。
遵守協議:
@interface MainVideoController ()<UITableViewDelegate, UITableViewDataSource, ZFPlayerDelegate, FullcellDalegate>
cell.delegate = self;
方法實現:
-(void)fullcellSelect:(NSIndexPath *)index WithBtnType:(NSInteger)type
{
}