自定义代理

自定义代理的使用比较频繁,掌握之后可使编程更加灵活。

代理类DaiLi

DaiLi.h

#import <UIKit/UIKit.h>
//自定义代理
@protocol DaiLiDelegate <NSObject>
//代理方法
- (void)change;

@end

@interface DaiLi : UIView

@property(nonatomic,strong)UIButton *btn;

@property(nonatomic,strong)id <DaiLiDelegate>delegate;

@end

DaiLi.m

#import "DaiLi.h"

@implementation DaiLi
@synthesize btn;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        btn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 100, 50)];
        //初试按钮颜色为红色
        btn.backgroundColor = [UIColor redColor];
        [btn addTarget:self action:@selector(clicked) forControlEvents:UIControlEventTouchUpInside];
        [self addSubview:btn];
    }
    return self;
}

- (void)clicked
{
    //点击方法中将按钮颜色变为黑色
    btn.backgroundColor = [UIColor blackColor];
    //代理方法
    [self.delegate change];
}
@end

代理的实现类ViewController

ViewController.m

#import "ViewController.h"
#import "DaiLi.h"

@interface ViewController ()<DaiLiDelegate>
{
    DaiLi *daiLi;
}
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    daiLi = [[DaiLi alloc]initWithFrame:CGRectMake(20, 100, self.view.frame.size.width-40, 100)];
    daiLi.delegate = self;
    [self.view addSubview:daiLi];
}
//代理方法的实现
- (void)change
{
    //此处讲按钮颜色变为黄色
    daiLi.btn.backgroundColor = [UIColor yellowColor];
}

@end

点击按钮我们会发现,结果并不是按钮点击方法中的将按钮变为黑色。这是因为在代理的实现方法里再次改变了按钮的颜色,使其变为黄色。

时间: 2024-10-11 06:58:08

自定义代理的相关文章

客户端使用自定义代理类访问WCF服务 z

通常在客户端访问WCF服务时,都需要添加服务引用,然后在客户端app.config或 web.config文件中产生WCF服务的客户端配置信息.若是每添加一个服务都是这样做,这样势必会将比较麻烦,能否简单在app.config或 web.config文件增加WCF服务地址,然后直接通过此地址访问WCF服务呢?可以,那就是通过自定义客户端代理类来实现.本文是通过继承 ClientBase<T>类实现的自定义客户端代理类,来实现同过简单在app.config或web.config文件增加wcf服务

iOS中的自定义代理模式

iOS中的自定义代理模式 自定义代理模式分为6步,遵循这6步,就能把代理完整的实现. 1.定义协议(协议中存放代理的任务).我们对于有的自定义的布局视图,并不会带有协议,为了满足我们有时候的开发需求,需要添加代理.那么我们就要先定义一个协议.如下:在自定义视图的DelegateView.h文件中定义一个DelegateViewDelegate协议,协议默认的都是必须的实现的方法,可以根据需求来添加可选实现的方法. 1.定义协议 2.定义代理属性,用来存储代理对象. 2.定义代理属性 3.为Del

爬虫之Handler处理器 和 自定义Opener

Handler处理器 和 自定义Opener opener是 urllib2.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的opener(也就是模块帮我们构建好的). 但是基本的urlopen()方法不支持代理.cookie等其他的HTTP/HTTPS高级功能.所以要支持这些功能: 使用相关的 Handler处理器 来创建特定功能的处理器对象: 然后通过 urllib2.build_opener()方法使用这些处理器对象,创建自定义opener对象:

Block与代理的使用

本人其实是比较喜欢用Block的,因为用block写出来的代码,让我感觉代码要紧凑一些,看起来的时候,思路要清晰些,所以这估计也就是现在block将要代替代理的原因所在吧! 下面,直接进入主题: 一.block block的书写看起来有点怪,其实你只要是懂了其思路,那就非常简单了!我这里就介绍一种初学者最容易记住的使用方法! 写block的时候,1.2.3.4步骤,都是在要传出只的对象中处理,只有最后一步,就是在接收传值的地方处理! 1.在我们传出事件类的.h中,对block进行定义: 2.我们

【iOS开发】代理(delegate)

代理是iOS开发中常用的设计模式.我们借助于protocol(参考博文:objective-c协议(protocol))可以很方便的实现这种设计模式. 什么是代理? 苹果的官方文档给了很清晰的解释: Delegation is a simple and powerful pattern in which one object in a program acts on behalf of, or in coordination with, another object. The delegatin

代理设计模式(转)

委托(delegate)也叫代理是iOS开发中常用的设计模式.我们借助于protocol(参考博文:objective-c协议(protocol))可以很方便的实现这种设计模式. 什么是代理? 苹果的官方文档给了很清晰的解释: Delegation is a simple and powerful pattern in which one object in a program acts on behalf of, or in coordination with, another object.

动态代理模式--源码分析

Proxy源码 1,成员变量 ?代理类的构造函数参数.默认每个代理类都具有一个invocationHandler的构造方法.(本文代码主要基于jdk 1.7) /** parameter types of a proxy class constructor */ private static final Class<?>[] constructorParams = { InvocationHandler.class }; ?缓存代理对象. private static final WeakCa

IOS设计模式--代理 (委托)

原文 http://blog.csdn.net/lovefqing/article/details/8270111 委托(delegate)也叫代理是iOS开发中常用的设计模式.我们借助于protocol(参考博文:objective-c协议(protocol))可以很方便的实现这种设计模式. 什么是代理? 苹果的官方文档给了很清晰的解释: Delegation is a simple and powerful pattern in which one object in a program a

小知识(七):代理&事件

代理delegate: 对象引用    指向    某个特定类型的对象. 代理        指向    某个特定类型的方法. 代理四步: 定义自定义代理类:public delegate void first(int i); 实例化代理类:first MyDelegate = null; 实例添加方法:MyDelegate += new first(show); 通过实例对象调用方法:MyDelegate(666); class Program { //定义frist代理 public del