代码块高级

来源:互联网 发布:网络监控结构图 编辑:程序博客网 时间:2024/05/21 17:36

本文要讲的是代码块作为参数,去控制视图的颜色

首先:创建一个视图控制器和导航视图控制器,把视图控制器加入跟视图

 MangoViewController *mang=[[MangoViewControlleralloc]init];

    

    UINavigationController *nav=[[UINavigationControlleralloc]initWithRootViewController:mang];

    self.window.rootViewController=nav;

    [mang release];

    [nav release];


视图控制器里创建一个button,去触发背景颜色的改变

UIButton *btn=[UIButtonbuttonWithType:UIButtonTypeCustom];

    btn.frame=CGRectMake(30, 300,self.view.frame.size.width-60, 44);

    [btn setTitle:@"点击"forState:UIControlStateNormal];

    [btn addTarget:selfaction:@selector(changeColor)forControlEvents:UIControlEventTouchUpInside];

    

    btn.backgroundColor=[UIColorblueColor];

    [self.viewaddSubview:btn];




之后创建一个model类,继承NSOject类,

在。h文件中写入声明方法

#import <Foundation/Foundation.h>


//导入系统类用尖括号<>

#import <UIKit/UIColor.h>




typedef void(^responseColor)(UIColor *willSetColor);



@interface ColorModel : NSObject


////把参数类型定义成block类型colorBlock是一个有参数无返回值的block。。。void(^)(UIColor *willSetColor)

//-(void)getViewColorWithColorBlock:(void(^)(UIColor *willSetColor))colorBlock;

//



-(void)getViewColorWithColorBlock:(responseColor)colorBlock;

在。m中写入实现方法:

- (void)getViewColorWithColorBlock:(responseColor)colorBlock{

    

    //随机颜色

    UIColor *willSetColor=[UIColorcolorWithRed:arc4random()%256/255.0fgreen:arc4random()%256/255.0fblue:arc4random()%256/255.0falpha:1.0];

    

    colorBlock(willSetColor);

    

    

}

之后,回到控制器里面写入点击按钮的实现方法:

-(void)changeColor{

    

    ColorModel *model=[[ColorModelalloc]init];

    

    

    //block的内部,不能直接使用实例变量,self调用属性,因为block会造成self引用计数加一,导致引用计数问题

    

    __block UIViewController *weakSelf=self;

    

    [model getViewColorWithColorBlock:^(UIColor *willSetColor) {

       //view重新设置颜色

       

       weakSelf.view.backgroundColor=willSetColor;

   }];

    

    

}





0 0