IOS- 最简单的反向传值- block

  block 常用于反向传值

   声明

 返回值类型 (^block)(参数列表)

   调用

闭包的名字=^(参数列表){};

  闭包的名字();

如:

void(^aaaaa)(int num,NSString *Sring);

    aaaaa=^(int num,NSString *string){

        NSLog(@"%d,%@",num,string);

    };

    

    

     aaaaa(120,@“www");

block实现反向传值

(1)用属性实现:

1.在.h文件声明:@property(nonatomic,copy)void(^block)(NSString * Nametexts);

2.在.m文件声明block的值:-(void)back:(UIButton *)sender{

    self.block (sender.titleLabel.text);

    [self dismissViewControllerAnimated:YES completion:nil];

}

3.在另一个ViewController.m中导入第一步的.h文件,之后:-(void)gonext{

    nextViewController *next = [[nextViewController alloc]init];

    next.block =^(NSString * Nametexts){

        label.text =Nametexts;(这里的Nametexts可以命名为别的名字,不影响传值)

    };

    

    [self presentViewController:next animated:YES completion:nil];

 

 

 

 

 

(2)用方法实现:1.在ViewController1.h 声明方

法:-(void)tou:(void(^)(NSString *message))block;

2.在ViewController1.m 调用这个方法:-(void)tou:(void(^)(NSString *message))block{

    block(@"大黄牛");

}

3.在ViewController.m中导入ViewController1.h  之后在- (void)viewDidLoad 输入:ViewController1 *v1 = [[ViewController1 alloc]init];

    

    

    [v1 tou:^(NSString *message) {

        NSLog(@"%@",message);

    }];

 

 

注意:1.修改Block外部变量的时候 需添加__block 修饰。

如:__block UIImage *image = nil;

  imageNameBlock =^(NSString *imageName){

       image = [UIImage imageNamed:imageName];

       self.view.backgroundColor = [UIColor colorWithPatternImage:image];

  };

   imageNameBlock (@"头像.jpg");

2.声明的 block为 全局变量时

  block会被循环引用 因此要用 __weak 弱引用

 例: __weak ViewController *vis = self;

    __block UIImage *image = nil;

        imageNameBlock =^(NSString *imageName){

            image = [UIImage imageNamed:imageName];

           vis.view.backgroundColor = [UIColor colorWithPatternImage:image];

        };

 

posted on 2015-09-24 21:45  popper小P  阅读(161)  评论(0编辑  收藏  举报