UI阶段 protocol/delegate设计模式
来源:互联网 发布:银行卡数据采集器 编辑:程序博客网 时间:2024/04/27 16:46
问题:我怎么实现通过点击,一个UIImageView的对象,实现相应的操作,这里以更换图片为例
思路二:仿照UIButton的target/action设计模式 (思路一请参阅上一篇)(参考UITextFieldDelegate设计)
(MFC 手动管理内存)
// 协议可以单独创建,也可以在类中创建
这里就在类中创建
首先还是声明一个ButtonImageView的类
创建一个协议
ButtonImageView.h
#import <UIKit/UIKit.h>@class ButtonImageView;@protocol ButtonImageViewDelegate <NSObject>// 方法 捕获点击事件- (void)buttonImageViewClick:(ButtonImageView *)btnImgView;@end@interface ButtonImageView : UIImageView// 设置代理属性 代理得是遵守协议对象,注意此次代理是用assign// 为了防止循环引用,造成内存泄露@property (nonatomic,assign)id <ButtonImageViewDelegate>delegate;@end
ButtonImageView.m
#import "ButtonImageView.h"@implementation ButtonImageView// 由于你需要点击,之后有相关的操作// 重写touches的相关方法- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{}- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{}- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ // 让代理去干活 // 当代理去调用代理方法 // 代理保护 if ([_delegate respondsToSelector:@selector(buttonImageViewClick:)]) { [_delegate buttonImageViewClick:self]; }}- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{}
RootViewController.h
#import <UIKit/UIKit.h>#import "ButtonImageView.h"@interface RootViewController : UIViewController<ButtonImageViewDelegate>@end
RootViewController.m
#import "RootViewController.h"#import "ButtonImageView.h"@interface RootViewController ()@end@implementation RootViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. UIImage *img = [UIImage imageNamed:@"5.jpg"]; ButtonImageView *btnImageView = [[ButtonImageView alloc]initWithFrame:[UIScreen mainScreen].bounds]; btnImageView.image = img; // 设置代理 btnImageView.delegate = self; // 打开交互 btnImageView.userInteractionEnabled = YES; [self.view addSubview:btnImageView]; [btnImageView release];}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}// 实现协议中的方法// 不管是Target/Action设计模式 还是代理设计模式 还是MVC 设计模式 中心只有一个 节耦(降低类和类之间的耦合性) 提高代码的复用性- (void)buttonImageViewClick:(ButtonImageView *)btnImgView{ // 更换头像 UIImage *img1 = [UIImage imageNamed:@"6.jpeg"]; btnImgView.image = img1;}@end
windows设置根视图的代码和思路一一致,也是最基本的步骤一致.
** 小结:
这里先简单介绍一些协议的步骤:
1.创建协议(协议名字,协议的方法)
2.遵守协议(谁遵守谁实现)
3.实现协议中的方法(谁遵守谁实现)
4.添加代理对象为实例变量(谁需要代理 就在那个类里声明实例变量的属性,而且还必须是遵守协议的实例变量的属性)
5.设置代理
6.让代理去干活(让代理去调用协议中的方法)
**
0 0
- UI阶段 protocol/delegate设计模式
- UI delegate设计模式
- UI阶段的 Target/Action设计模式
- UI - Delegate模式
- Protocol and Delegate 协议和代理(设计模式之代理模式)
- Protocol 协议和Delegate代理模式
- ios设计模式 delegate
- Delegate委托设计模式
- Delegate 设计模式
- Protocol delegate
- protocol代理设计模式
- IOS设计模式:Delegate模式
- 设计模式学习阶段
- Object-C delegate 设计模式
- delegate代理(委托)设计模式
- iOS-delegate设计模式
- iOS之Delegate设计模式
- iOS开发 -- delegate 设计模式
- 微波工程学习心得(一)D.M.Pozar版
- wxpython学习2
- 学习html5(2)
- 安卓位置服务简介
- SHA算法详解
- UI阶段 protocol/delegate设计模式
- iOS 多图上传
- iOS开发之Tom猫
- Android屏幕适配全攻略(最权威的官方适配指导)
- 正向代理与反向代理
- BST树的所有可能情况
- 泛型中? super T和? extends T的区别
- 微信支付 出现 签名错误 有可能的原因是因为参数中含有空格
- iOS - Umeng分享