ios委托(由传对象实例引入委托详解)

我们先不讲委托,先用一个类似委托的例子来引入委托,这样会更好理解一些!

首先,我创建一个工程,叫Delegate,然后创建一个控制器叫ZQTestViewController,再创建一个类叫MyView,此类继承UIView.
然后先把ZQTestViewController放到window上,代码

ZQTestViewController *vi = [[ZQTestViewController alloc]init];
    self.window.rootViewController = vi;

然后在MyView.m文件中把它的初始化方法initWithFrame重写,在其上加一个按钮,代码:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
        CGPoint point = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
        //CGPoint point = CGPointMake(0,0);
        btn.bounds = CGRectMake(0, 0, 50, 50);
        btn.center = point;
        [btn addTarget:self action:@selector(doSome:) forControlEvents:UIControlEventTouchUpInside];
        btn.backgroundColor = [UIColor grayColor];
        [self addSubview:btn];

        //NSLog(@"%f",self.frame.origin.x/2);
        //[btn bringSubviewToFront:self];
    }
    return self;
}

然后在控制器的viewDidLoad中创建MyView对象,把其对象放到控制器上.代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    MyView *view = [[MyView alloc]initWithFrame:CGRectMake(0, 0, 160, 240)];
    //view.bounds = CGRectMake(0, 0, 160, 240);
    view.center = self.view.center;
    view.backgroundColor = [UIColor greenColor];
    [self.view addSubview:view];

}

现在运行模拟器,显示效果如下

这里写图片描述

———-华丽的分割线

现在来讲我们要实现的功能,首先,我想在点击按钮的时候,然后控制器的背景改成随机颜色,
此时在MyView中要给按钮添加事件,代码

- (void)doSome:(UIButton *)btn{


}

然后此时我把改变控制器的颜色的方法(changeBackground)写在控制器中,想让MyView的按钮事件调用changeBackground方法.

此时问题就来了!MyView的对象根本不能调用控制器中的changeBackground方法.他们唯一的关系就是MyView放在了控制器上而已.怎么办呢?

此时我们要让MyView和控制器发生关系了,方法是:
在MyView中添加一个属性,此属性的类型是控制器类型的,然后在控制器中创建MyView对象的时候,让MyView的控制器属性赋值控制器,代码实现如下:
这个是MyView.h文件

#import <UIKit/UIKit.h>
#import "ZQTestViewController.h"
@interface MyView : UIView
@property (nonatomic,retain)ZQTestViewController *zhuRen;
@end

控制器的viewDidLoad方法代码以及改变颜色的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    MyView *view = [[MyView alloc]initWithFrame:CGRectMake(0, 0, 160, 240)];
    //view.bounds = CGRectMake(0, 0, 160, 240);
    view.center = self.view.center;
    view.zhuren = self;//因为此方法是控制器调用的,所以self是控制器,让MyView的控制器属性赋值控制器
    view.backgroundColor = [UIColor greenColor];
    [self.view addSubview:view];

}
- (void)changeBackground{
    self.view.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1];
}

然后让MyView的中的按钮调用changeBackground方法.代码:

- (void)doSome:(UIButton *)btn{

    [self.zhuRen changeBackground];
}

然后完美实现此功能,即点击按钮,让控制器的背景颜色随机改变!

———-分割线,引入委托

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值