zoukankan      html  css  js  c++  java
  • 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];

            };

  • 相关阅读:
    [v]Linux下安装Git
    Ubuntu12.04 安装PyCharm
    IE11 Enterprise Mode
    Ubuntu 14.04 安装nVidia驱动后不能进入图形界面的恢复过程
    VirtualBox中安装Ubuntu12.04/Ubuntu14.04虚拟机
    Notepad++配置Python开发环境
    boost 1.56.0 编译及使用
    关于"The dependency was added by the project system and cannot be removed" Error
    [v]Windows下Git安装指南
    Windows开发环境搭建(安装 VS2010, VS2013, VS2015 Community, Windows Server 2008 R2)
  • 原文地址:https://www.cnblogs.com/popper123/p/4836684.html
Copyright © 2011-2022 走看看