您的位置:首页 > 编程语言

代码块高级

2015-12-07 17:36 381 查看
本文要讲的是代码块作为参数,去控制视图的颜色

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

MangoViewController *mang=[[MangoViewController
alloc]init];



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

self.window.rootViewController=nav;

[mang release];

[nav release];

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

UIButton *btn=[UIButton
buttonWithType:UIButtonTypeCustom];

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

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

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



btn.backgroundColor=[UIColor
blueColor];

[self.view
addSubview: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=[UIColor
colorWithRed:arc4random()%256/255.0f
green:arc4random()%256/255.0f
blue:arc4random()%256/255.0f
alpha:1.0];



colorBlock(willSetColor);





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

-(void)changeColor{



ColorModel *model=[[ColorModel
alloc]init];






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



__block UIViewController *weakSelf=self;



[model getViewColorWithColorBlock:^(UIColor *willSetColor) {

//给view重新设置颜色



weakSelf.view.backgroundColor=willSetColor;

}];





}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: