•
对象
A内部发生了一些事情,想通知
对象
B
•
•
对象
B想监听
对象
A内部发生了什么事情
•
•
对象
A想在自己的方法内部调用
对象
B的某个方法,并且对象A不能对对象B有耦合依赖
•
•
对象
A想传递数据给
对象
B
•
•……
•
以上情况,结果都一样:对象B是对象A的代理(delegate)
•
•
1.先搞清楚谁是谁的代理(delegate)
●
2.定义代理协议,协议名称的命名规范:
控件类名
+
Delegate
●
3.定义代理方法
Ø代理方法一般都定义为
@optional
Ø代理方法名都以控件名开头
Ø代理方法至少有1个参数,将控件本身传递出去
Ø
4.设置代理(delegate)对象 (比如myView.delegate = xxxx;)
Ø代理对象遵守协议
Ø代理对象实现协议里面该实现的方法
Ø
5.在恰当的时刻调用代理对象(delegate)的代理方法,通知代理发生了什么事情
(在调用之前判断代理是否实现了该代理方法)
@protocol MJTgFooterViewDelegate <NSObject>
@optional
- (void)tgFooterViewDidClickedLoadBtn:(MJFooterView *)tgFooterView;
@end
@interface MJFooterView : UIView
+(instancetype)footerView;
@property(nonatomic,weak) id<MJTgFooterViewDelegate> delegate; 类型id只要遵循了协议 用于拿到其他文件的方法 在自己这定义方法 别的文件有需要的属性实现它
@end