• IOS-委托代理(degegate)


    委托代理:

    委托代理(degegate)顾名思义,把某个对象要做的事情委托给别的对象去做。那么别的对象就是这个对象的代理,代替它来打理要做的事。反映到程序中, 首先要明确一个对象的委托方是哪个对象,委托所做的内容是什么。委托机制在很多语言中都用到的,这只是个通用的思想,网上会有很多关于这方面的介绍。 那么在苹果开发过程中,用到委托的程序实现思想如下,我主要拿如何在视图之间传输信息做个例子。譬如:在两个页面(UIView视 图对象)实现传值,用委托(delegate)可以很好做到

    代理设计模式
    1.使用场合:
    1> 当A对象发生了一些事情,想告诉B对象,就让B对象成为A对象的代理
    2> B对象想监听A对象发生的一些事情,就让B对象成为A对象的代理

    2.步骤
    1> 定义一份代理协议(比如QQGroupHeaderDelegate)(等着代理对象去实现)
    * 协议名都以控件的类名开头,比如QQGroupHeader的代理协议叫做QQGroupHeaderDelegate
    * 协议里面的方法一般都不强制代理去实现,所以方法前面加上@optional
    * 协议里面的方法名都以类名开头(但是不加前缀,比如QQGroupHeader的代理方法都是以groupHeader开头)
    * 协议里面的方法必须能传入控件本身这个参数

    2> 定义一个代理属性
    @property (nonatomic, weak) id<QQGroupHeaderDelegate> delegate;

    3> 设置代理属性(代理用weak)
    header.delegate = controller;

    4> 通知代理
    * 先检测代理有没有实现对应的代理方法
    if ([_delegate respondsToSelector:@selector(groupHeaderClick:)]) {
        [_delegate groupHeaderClick:self];
    }


    5> 一段实例代码

    1. 定义一分协议
    @class HGStageView;
    @protocol HGStageViewDelegate <NSObject>
    //@required的表示这个方法必须实现,否则将会得到编译器的警告,而@optional 为可选实现,为默认值
    @optional
    // 一般将自己传出去,它的代理好获得相应的值
    - (void)stageViewIconClick:(HGStageView *)stageView;
    @end

    2. 让代理成为自己的属性

    // 代理一般用weak
    @property (nonatomic, weak) id<HGStageViewDelegate> delegate;

    3.触发代理事件通知代理

    #pragma mark 点击了LOGO
    - (IBAction)iconClick {
        if ([_delegate respondsToSelector:@selector(stageViewIconClick:)]) {
            [_delegate stageViewIconClick:self];
        }
    }

    4.遵守代理协议

    @interface HGStagesViewController () <HGStageViewDelegate>

    5.实现代理方法

    #pragma mark - stageView的代理方法
    - (void)stageViewIconClick:(HGStageView *)stageView
    {
        // 执行对应的线,并且传递模型数据(sender对应的模型数据会传给prepareForSegue方法的sender参数)
        [self performSegueWithIdentifier:@"stages2ready" sender:stageView.stage];
    }

  • 相关阅读:
    mysql联合主键自增、主键最大长度小记
    针对list集合进行分页展示
    初识javascript变量和基本数据类型
    12.19如何定义正则表达式
    人民币符号在html的显示方法
    windows下的NodeJS安装
    css 实现未知图片垂直居中
    IE678下placeholder效果,支持文本框和密码框
    jvm004 解析与分派
    jvm003 类加载的过程
  • 原文地址:https://www.cnblogs.com/mcj-coding/p/3555514.html
Copyright © 2020-2023  润新知