写一个代理
重点:
1、协议最好实现根协议
2、代理方法设置位id,这样任何类型都可以
第二次总结
1、首先写一个协议,这个写在类的声明里(就是JAVA的先写好一个接口interface),协议实现根协议
注意:1、协议名就死控件名加上Delegate
2、方法上我们加上@optional,方法可以不实现
3、特别重要命名:这里协议的方法如果是View的就以View开头,不要加前缀,比如UI,就直接写scrollViewXXXXX
4、所有代理得传入对应的控件才好,这里写法有二种,我们可以参考ScrollView来写
第一种写法:只有一个入参的,这里就把控件名写到最后面
第二种写法:有多个入参,方法名拆开写
@protocol TgFooterViewDelegate <NSObject>
@optional
- (void)tgFooterViewLoadDidClick:(TgFooterView *) TgFooterView;
@end
2、再写一个代理
注意:1、代理属性是(nonatomic, weak)
2、代理的类型是id,这样不受任何限制
3、代理中代理属性的名字是:delegate,记住前面是不带有*符号的
这里考虑是不是只要是返回id类型,都不用带上*
4、最重要一点:*****************
这里一定要判断代理是否实现,实现了再执行方法
@property(nonatomic, weak) id<TgFooterViewDelegate> delegate;//写一个代理
申明类-----------
@property(nonatomic, weak) id<TgFooterViewDelegate> delegate;//写一个代理
#import <UIKit/UIKit.h>
@protocol TgFooterViewDelegate <NSObject>
@optional
- (void)loadingMoreData;
@end
@interface TgFooterView : UIView
+ (instancetype)footerView;//用来返回TgFooterView对象
@property(nonatomic, weak) id<TgFooterViewDelegate> delegate;//写一个代理
@end
实现类----------- 一定记住当调用我们代理方法的时候判断方法是否实现respondsToSelector方法
/**
* 点击加载按钮显示
*/
- (IBAction)loadBtnClick
{
//1、隐藏按钮
self.loadBtn.hidden = YES;
//2、显示正在加载
self.loadView.hidden = NO;
//3、显示更多数据
//3.1 添加更多数据模型
if ([self.delegate respondsToSelector:@selector(tgFooterViewLoadDidClick:)]) {
[self.delegate tgFooterViewLoadDidClick:self];
}
//3.2 刷新表格(告诉tableView重新加载模型数据,调用tableView的ReloadData)
}
@end
-----------------------------------------------------------
使用
重点:
1、设置对应的代理对象是谁,然后代理对象再实现对应的代码
TgFooterView *footerView = [TgFooterView footerView];
footerView.delegate = self;
代理:如何写一个代理
最新推荐文章于 2020-11-03 09:30:57 发布