学习IOS开发的第14天

今天学习了block语法的使用。

对象之间的通信,可以使用代理,还可以使用通知。而block语法也可以让对象之间相互通信。与代理方法一样,也是通过回调来实现的。

比如在A类中声明一个block,在某个事件下会调用block。然后B类创建了A类实例,并设置A类的block,编写block的实现。在A类遇到某个事件调用block时,就会调用B类中block的代码,执行相应操作。


下面我们用代码来实现block语法。

首先我们创建一个MyButton类,继承于UIButton。接着我们声明一个名为buttonBlock的block。

//声明block
@property(nonatomic,copy) void(^buttonBlock)(MyButton*);

然后我们给MyButton类添加一个监听的事件。

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        
        //添加事件
        [self addTarget:self action:@selector(Click) forControlEvents:UIControlEventTouchUpInside];
    }
    return self;
}
当被按下时,会执行Click方法。在Click方法中,我们调用block。
//点击后的方法
-(void)Click{
    //回调block
    self.buttonBlock(self);
}
编写完MyButton类,我们在应用的代理类中创建它。

    //创建我的按钮
    MyButton *myButton = [[MyButton alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    [myButton setTitle:@"点击" forState:UIControlStateNormal];
    myButton.backgroundColor = [UIColor redColor];
接着编写block的实现,并将它赋给MyButton类的实例。我们在block中改变MyButton的颜色。
    //编写回调的block
    myButton.buttonBlock = ^(MyButton *button){
        //改变颜色
        if (button.backgroundColor == [UIColor redColor]) {
            button.backgroundColor = [UIColor blueColor];
        }
        else
            button.backgroundColor = [UIColor redColor];
    };

然后创建一个视图控制器,将MyButton类的实例添加到它上面。最后将控制器设置为window的根视图控制器,并执行。

    //创建控制器
    UIViewController *viewController = [[UIViewController alloc] init];
    //添加按钮
    [viewController.view addSubview:myButton];
    //设控制器为window的根控制器
    self.window.rootViewController=viewController;
运行后,点击按钮,按钮颜色发生变化,MyButton类回调了block中的代码。


运行结果截图:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值