代理设计模式

33 篇文章 0 订阅

1.Delegate的使用场合

对象A内部发生了一些事情,想通知对象B

对象B想监听对象A内部发生了什么事情

对象A想在自己的方法内部调用对象B的某个方法,并且对象A不能对对象B有耦合依赖

对象A想传递数据给对象B

……

以上情况,结果都一样:对象B对象A的代理(delegate)

2.使用delegate的步骤

1.先搞清楚谁是谁的代理(delegate)

2.定义代理协议,协议名称的命名规范:控件类名 + Delegate

3.定义代理方法

代理方法一般都定义为@optional

代理方法名都以控件名开头

代理方法至少有1个参数,将控件本身传递出去

4.设置代理(delegate)对象 (比如myView.delegate = xxxx;)

代理对象遵守协议

代理对象实现协议里面该实现的方法

5.在恰当的时刻调用代理对象(delegate)的代理方法,通知代理发生了什么事情

(在调用之前判断代理是否实现了该代理方法)  这一点比较重要

3.代码事例













如图控制器要监听 button的点击 并加载更多的内容

1.定义代理协议,协议名称的命名规范:控件类名 + Delegate

@protocol LRTgFooterViewDelegate <NSObject>


@optional

/**加载数据*/

方法名称的规范

代理方法一般都定义为@optional

代理方法名都以控件名开头

代理方法至少有1个参数,将控件本身传递出去

- (void)tgFooterViewDidClickedBtn:(LRTgFooterView *)tgFooterView;

@end


2.设置代理(delegate)对象 

footerView.delegate = self;


3.代理对象遵守协议

@interface ViewController () <UITableViewDataSource,LRTgFooterViewDelegate>


4.代理对象实现协议里面该实现的方法

- (void)tgFooterViewDidClickedBtn:(LRTgFooterView *)tgFooterView{

    //1.添加更多的模型数据

   LRTg *tg = [[LRTgalloc] init];

    tg.icon =@"ad_00";

    tg.title =@"新加入的模型";

    tg.price =@"80";

    tg.buyCount =@"123";

    [self.tgsaddObject:tg];

    

    //2.刷新表格 (告诉tableView重新加载模型数据  调用tableViewreloadData)

    [self.tableViewreloadData];

}


5.在恰当的时刻调用代理对象(delegate)的代理方法,通知代理发生了什么事情

(在调用之前判断代理是否实现了该代理方法)  这一点比较重要


- (IBAction)loadBtnClick {

    

    //1.loadBtn隐藏 并将loadView显示出来

   self.loadBtn.hidden =YES;

    self.loadingView.hidden =NO;

    

    //显示更多的数据

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{//1.0s后执行block里面的代码

        

        //如果有这种方法就调用

       if ([self.delegaterespondsToSelector:@selector(tgFooterViewDidClickedBtn:)]) {

            [self.delegatetgFooterViewDidClickedBtn:self];

        }

        

       self.loadBtn.hidden =NO;

       self.loadingView.hidden =YES;

    });

}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值