block_块语法

来源:互联网 发布:论文表格数据来源格式 编辑:程序博客网 时间:2024/06/05 23:10

block块语法,避免了代理传值的麻烦。


// block的定义

    

    

    // 1.无返回值 无参数的block变量

    // int a = 3; 等价

    void (^block)(void) = ^(void){

        //函数的定义

        NSLog(@"block语法");

    };

    

    // block的使用

    block();

    

    

    

    // block的结构

    /*

     

     返回值类型(^ 变量名) (参数类型, 参数类型 ^(参数类型, 参数类型){

     要执行的代码};

     

     */

    

    // 2.无返回值 有参数的block语法

    void(^ block1) (int b) = ^(int b) {

        NSLog(@"传入的参数值为: %d", b);

    };

    

    // 使用block 需要传入一个参数

    block1(2);

    

    

    

    // 3.有返回值 无参数的block语法

    NSString *(^ block2) (void) = ^(void) {

        return @"111";

    };

    NSLog(@"%@", block2());

    

    

    

    // 4.有返回值 有参数

    int (^ block3) (int b) = ^(int b) {

        return 4 * b;

    };

    

    NSLog(@"%d", block3(5));

    


要在第二个视图控制器控制第一个控制器,使其改变第一个视图控制器的颜色;具体如下:



FirstViewController:


- (void)viewDidLoad

{

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    建一个button,点击跳到第二个页面

    UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];

    button.frame = CGRectMake(2014028040);

    button.backgroundColor = [UIColor purpleColor];

    [button setTitle:@"button" forState:UIControlStateNormal];

    [button addTarget:self action:@selector(buttonClickedColor:)forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:button];

    

}



- (void)buttonClickedColor:(UIButton *)button

{

    block块语法

    111,先在First里写出block的语法,实现什么功能,返回值,参数类型等

    void (^block)(UIColor *color) = ^(UIColor *color) {

        self.view.backgroundColor = color;

    };

    SecondViewController *second = [[SecondViewController allocinit];

    444.调用second属性,使其接收颜色值

    second.block = block;

    [self.navigationController pushViewController:second animated:YES];

}


SecondViewController:


222. second里定义属性,

@property (nonatomiccopy)void(^block)(UIColor *color);


- (void)viewDidLoad

{

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    用于点击返回第一个页面

    UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];

    button.frame = CGRectMake(20200280100);

    [button setTitle:@"button" forState:UIControlStateNormal];

    [button addTarget:self action:@selector(back:)forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:button];

    

}


333.将button点击的方法返回紫色

- (void)back:(UIButton *)button

{

    self.block ([UIColor purpleColor]);

}




////////另一种方法,自己定义一个方法,
在second定义方法,并实现

.h

@property (nonatomiccopy)void(^block)(UIColor *color);属性


- (void)changeFirst:(void(^)(UIColor *color))block1;自定义方法


.m
点击返回的颜色

- (void)back:(UIButton *)button

{

    self.block ([UIColor purpleColor]);

}



- (void)changeFirst:(void(^)(UIColor *color))block1

{    给自己的属性赋值

    self.block = block1;

}



First:里调用方法

[second changeFirst:^(UIColor *color) {

        self.view.backgroundColor = color;

    }];


0 0
原创粉丝点击