美文网首页
iOS 委托代理delegate

iOS 委托代理delegate

作者: _Royal_ | 来源:发表于2023-08-02 11:31 被阅读0次

主要用途,可以在子视图中通知父视图改变布局或者做一些操作,或者实现从后向前传值。

委托通过@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 {
   // 实现你的操作
}

相关文章

网友评论

      本文标题:iOS 委托代理delegate

      本文链接:https://www.haomeiwen.com/subject/crfppdtx.html