代理的使用步驟
-
定義一份代理協(xié)議
- 協(xié)議名字的格式一般是:類名 + Delegate
- 比如UITableViewDelegate
- 設(shè)計(jì)代理的細(xì)節(jié)
- 一般都是@optional(讓代理可以有選擇性去實(shí)現(xiàn)一些代理方法)
- 方法名一般都以類名開頭
- 比如
- (void)scrollViewDidScroll:
- 比如
- 一般都需要將對象本身傳出去
- 比如tableView的代理方法都會(huì)把tableView本身傳出去
- 必須要遵守NSObject協(xié)議(基協(xié)議)
- 比如
@protocol BQWineCellDelegate <NSObject>
- 比如
- 協(xié)議名字的格式一般是:類名 + Delegate
-
聲明一個(gè)代理屬性
- 代理的類型格式:id<協(xié)議> delegate
@property (nonatomic, weak) id< BQWineCellDelegate> delegate;
設(shè)置代理對象
代理對象遵守協(xié)議益缎,實(shí)現(xiàn)協(xié)議里面相應(yīng)的方法
-
當(dāng)控件內(nèi)部發(fā)生了一些事情共啃,就可以調(diào)用代理的代理方法通知代理
- 如果代理方法是@optional,那么需要判斷方法是否有實(shí)現(xiàn),直接調(diào)用可能會(huì)報(bào)錯(cuò)
if ([self.delegate respondsToSelector:@selector(wineCellDidClickPlusButton:)]) {
[self.delegate wineCellDidClickPlusButton:self];
}