iOS 委托代理delegate
2023-08-02 本文已影响0人
_Royal_
主要用途,可以在子视图中通知父视图改变布局或者做一些操作,或者实现从后向前传值。
委托通过@protocol声明,可以定义方法,引用委托的对象,需要实现其方法,方法默认都是@required的,同时可以设置为可选的@optional,首先定义委托ListDidScrollDelegate,定义列表List类GoodsListCollView,并在列表类中实现代理的属性
// GoodsListCollView.h
@protocol ListDidScrollDelegate <NSObject>
@required
// 这是代理必须实现的函数
- (void)listViewDidScroll:(UIScrollView *)scrollView;
@optional
// 这是代理可选实现的函数
- (void)closedView;
@end
@interface GoodsListCollView : UICollectionView
// 实现代理属性
@property (assign,nonatomic) id<ListDidScrollDelegate> listDelegate;
@end
因为GoodsListCollView是一个UICollectionView,所以我们在该类中实现代理函数scrollViewDidScroll:,并在函数中实现我们自定义的ListDidScrollDelegate的必选函数的调用:
// GoodsListCollView.m
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (self.listDelegate && [self.listDelegate respondsToSelector:@selector(listViewDidScroll:)]) {
[self.listDelegate listViewDidScroll:scrollView];
}
}
之后定义一个HomeVC类,并初始化GoodsListCollView类,实现其代理以及代理函数
// HomeVC.h
@interface HomeVC : UIViewController
@end
// HomeVC.m
@interface HomeVC ()<ListDidScrollDelegate> // 遵循协议
@property (strong, nonatomic) GoodsListCollView *pddListView;// 初始化
@end
@implementation HomeVC
- (void)viewDidLoad {
self.pddListView = [[GoodsListCollView alloc] init];
self.pddListView.listDelegate = self;
}
@end
#pragma mark - ListDidScrollDelegate
/// GoodsListCollView代理函数
/// - Parameter scrollView: GoodsListCollView类
- (void)listViewDidScroll:(UIScrollView *)scrollView {
// 实现你的操作
}