代理模式设计

[toc]

代理模式设计

用处

当我们需要监听某个控件的点击的时候,我们总希望可以相应的会调用某个方法,去实现我们想要实现的效果,想要实现这种方式,通知是一个方法,当然我们这里说的是另一个方法___代理

比如,我们封装了一个控件叫WXLoadMoreFooter, 应用到了我们的一个页面中,当我们点击它的时候,能够加载更多的数据,这个时候我们就需要监听它的点击,

协议可以和头文件写在一起,没必要单独弄一个. h 文件出来,当然也可以.
WXLoadMoreInfo.h

#import <UIKit/UIKit.h>

//协议
class WXLoadMoreFooter;
@protocol WXLoadMoreFooterDelegate <NSObject>

//协议里定义一个可以选择实现的方法
@optional
- (void)loadMoreFooterDidClickLoadMoreButton:(WXLoadMoreFooter *)footer;

@end


@interface WXLoadMoreFooter : UIView

+( instancetype)footer;

@property (nonatomic,weak)id <WXLoadMoreFooterDelegate >delegate ;


@end

WXLoadMoreInfo.m

#import "WXLoadMoreFooter.h"

@interface WXLoadMoreFooter()

@property (weak, nonatomic) IBOutlet UILabel *loadMoreLable;

@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *achive;

@end


@implementation WXLoadMoreFooter

//提供一个创建对象的类方法
+(instancetype)footer{
    
    //返回 xib 控件
    WXLoadMoreFooter *footer = [[[NSBundle mainBundle]loadNibNamed:NSStringFromClass(self) owner:nil options:nil]lastObject];
    
    return footer ;
}
- (IBAction)loadMore:(id)sender {
    
    self.loadMoreLable.text = @"加载更多数据";
    //回调代理方法(告诉代理执行方法)
    //先判断代理有没有实现这个方法,如果有实现,再回调这个方法.
    if ([self.delegate respondsToSelector:@selector(loadMoreFooterDidClickLoadMoreButton:)]) {
        [self.delegate loadMoreFooterDidClickLoadMoreButton:self];

    }
    
}

@end

注意
这里需要注意的是,在回调方法之前,先判断一下代理有木有实现这个方法,如果没有实现这个方法,直接回调的话,会引起崩溃,所以需要先判断一下,然后在回调.
使用:

#import "ViewController.h"
#import "WXLoadMoreFooter.h"

@interface ViewController ()<WXLoadMoreFooterDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    WXLoadMoreFooter *footer = [WXLoadMoreFooter footer ];
    footer.delegate = self;
    [self.view addSubview:footer];
    
}


//实现代理方法
- (void)loadMoreFooterDidClickLoadMoreButton:(WXLoadMoreFooter *)footer{
    
    NSLog(@"代理方法回调成功.");
}
@end


log:

2017-03-29 17:58:08.293 代理模式设计实例[32177:867661] 代理方法回调成功.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,216评论 25 709
  • 一、简介 核心作用通过代理,控制对对象的访问可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调...
    yjaal阅读 2,540评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,337评论 19 139
  • #玩卡不卡·每日一抽# 每一位都可以通过这张卡片觉察自己: 1、直觉他叫什么名字?Tom 2、他几岁了? 17岁 ...
    张梦格阅读 1,313评论 0 0
  • 1、身体的小灵魂好像提醒我现在要写我心我问十一是吗? 2、可是我感觉好像还未准备好不是吗? 3、不知道要写些什么?...
    独一无二的小茶叶阅读 3,685评论 0 0