美文网首页
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