主要用途徒仓,可以在子視圖中通知父視圖改變布局或者做一些操作,或者實(shí)現(xiàn)從后向前傳值誊垢。
委托通過@protocol聲明掉弛,可以定義方法,引用委托的對(duì)象喂走,需要實(shí)現(xiàn)其方法殃饿,方法默認(rèn)都是@required的,同時(shí)可以設(shè)置為可選的@optional芋肠,首先定義委托ListDidScrollDelegate
壁晒,定義列表List類GoodsListCollView
,并在列表類中實(shí)現(xiàn)代理的屬性
// GoodsListCollView.h
@protocol ListDidScrollDelegate <NSObject>
@required
// 這是代理必須實(shí)現(xiàn)的函數(shù)
- (void)listViewDidScroll:(UIScrollView *)scrollView;
@optional
// 這是代理可選實(shí)現(xiàn)的函數(shù)
- (void)closedView;
@end
@interface GoodsListCollView : UICollectionView
// 實(shí)現(xiàn)代理屬性
@property (assign,nonatomic) id<ListDidScrollDelegate> listDelegate;
@end
因?yàn)?code>GoodsListCollView是一個(gè)UICollectionView
业栅,所以我們?cè)谠擃愔袑?shí)現(xiàn)代理函數(shù)scrollViewDidScroll:
秒咐,并在函數(shù)中實(shí)現(xiàn)我們自定義的ListDidScrollDelegate
的必選函數(shù)的調(diào)用:
// GoodsListCollView.m
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (self.listDelegate && [self.listDelegate respondsToSelector:@selector(listViewDidScroll:)]) {
[self.listDelegate listViewDidScroll:scrollView];
}
}
之后定義一個(gè)HomeVC
類,并初始化GoodsListCollView
類碘裕,實(shí)現(xiàn)其代理以及代理函數(shù)
// HomeVC.h
@interface HomeVC : UIViewController
@end
// HomeVC.m
@interface HomeVC ()<ListDidScrollDelegate> // 遵循協(xié)議
@property (strong, nonatomic) GoodsListCollView *pddListView;// 初始化
@end
@implementation HomeVC
- (void)viewDidLoad {
self.pddListView = [[GoodsListCollView alloc] init];
self.pddListView.listDelegate = self;
}
@end
#pragma mark - ListDidScrollDelegate
/// GoodsListCollView代理函數(shù)
/// - Parameter scrollView: GoodsListCollView類
- (void)listViewDidScroll:(UIScrollView *)scrollView {
// 實(shí)現(xiàn)你的操作
}