博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS设计模式之代理模式
阅读量:4975 次
发布时间:2019-06-12

本文共 1930 字,大约阅读时间需要 6 分钟。

代理:

一.课件定义:为其他对象提供一种代理,以控制对这个对象的访问。

   理解定义:代理就是为控制器中的某一控件提供一些其实现不了的方法,用于达到控件想要做的事情

二.具体DEMO

我们首先要声明一个代理方法(及协议)

#import <Foundation/Foundation.h>

 @class tapView;

 @protocol TapImageViewDelegate <NSObject>

 -(void)tapImageViewClick:(tapView *)tapImgView;

 @end

然后在控制器的控件类里将代理声明出来

.h文件:声明

@interface tapView : UIView

@property (nonatomic, strong) UIImageView * ima;

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

@end

.m文件:判断代理是否有个方法,如果有将控件类对象作为参数传给代理方法,并调用代理方法

@implementation tapView

 - (id)initWithFrame:(CGRect)frame

{

  if (self = [super initWithFrame:frame])

    {

        _ima = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];

        _ima.userInteractionEnabled = YES;

        [self addSubview:_ima];    

       

        UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(change:)];

        [tap setNumberOfTapsRequired:1];

        [tap setNumberOfTouchesRequired:1];

        [_ima addGestureRecognizer:tap];

    }

    return self;

}

 

- (void) change:(UITapGestureRecognizer *)sender

{

    if ([_delegate respondsToSelector:@selector(tapImageViewClick:)])

    {

        [_delegate tapImageViewClick:self];

    }

}

在控制器.m文件中,让控件类的类对象遵循自定义代理,自定义代理在.m文件中实现

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    self.view.backgroundColor =[UIColor whiteColor];

    for (int i = 0; i < 3 ; i ++)

    {

        tapView * imageV = [[tapView alloc] initWithFrame:CGRectMake(i * 80, 50, 80, 80)];

        imageV.delegate = self;

        imageV.ima.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",i + 1]];

        [self.view addSubview:imageV];

    }

}

//代理方法 

-(void)tapImageViewClick:(tapView *)tapImgView

{

    UIImageView * backimage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

    backimage.image = tapImgView.ima.image;

    [self.view addSubview:backimage];

}

 

程序做的顺序:先走控制器中的遵循代理,当点击事件发生后则走控件累的判断代理,在判断代理中调用控制器的实现代理方法,实现代理功能,达到控件想要达到的目的

转载于:https://www.cnblogs.com/YU411524/p/4856382.html

你可能感兴趣的文章
生成php所需要的APNS Service pem证书的步骤
查看>>
JavaWeb之JSON
查看>>
HOT SUMMER 每天都是不一样,积极的去感受生活 C#关闭IE相应的窗口 .
查看>>
optionMenu-普通菜单使用
查看>>
2016-2017-2点集拓扑作业[本科生上课时]讲解视频
查看>>
【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules
查看>>
Ognl中“%”、“#”、“$”详解
查看>>
我对应用软件——美团的看法
查看>>
struts2.x + Tiles2.x读取多个xml 配置文件
查看>>
表单校验之datatype
查看>>
python第六篇文件处理类型
查看>>
ubuntu16系统磁盘空间/dev/vda1占用满的问题
查看>>
grid网格布局
查看>>
JSP常用标签
查看>>
九涯的第一次
查看>>
处理器管理与进程调度
查看>>
向量非零元素个数_向量范数详解+代码实现
查看>>
java if 用法详解_Java编程中的条件判断之if语句的用法详解
查看>>
matlab sin函数 fft,matlab的fft函数的使用教程
查看>>
mysql adddate()函数
查看>>