block 代码块 反向传值

block 代码块 也称作闭包 与C语言函数类似  具有反向传值、回调的功能

block公式分两种:

①声明和实现写到一块的公式

返回值类型(^block名字)(参数列表 参数类型 参数名) = ^(参数列表 参数类型 参数名){

实现代码(如果有返回值 需要return 返回值类型的值)

};

 调用:block名字(参数);

②声明和实现分开写的公式

(1)声明

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

(2)实现

block名字 = ^(参数列表){

实现代码(如果有返回值 需要return 返回值类型的值)

};

  (3)调用

block名字(实参);

  注? 在调用之前必须有实现的方法

今天在这里主要将一下block的方向传值(方向传值就是在回调的时候给他一个值),通过button的示例来讲一下block怎么反向传值。

具体代码如下:

在AppDelegate.m中创建带导航栏的窗口

#import "AppDelegate.h"
#import "ViewController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];

    self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[[ViewController alloc]init]];

    [self.window makeKeyAndVisible];

    return YES;

}

@end

在ViewController.m文件里面创建两个button,并且创建一个继承于UIViewController名叫BlockViewController类,导入ViewController.m文件里面

#import "ViewController.h"
#import "BlockViewController.h"

@interface ViewController ()
{

    UIButton *testButton;

}
@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];

    [self createButton]; 

}

- (void)createButton{ 

    //放图片的button

    testButton = [UIButton buttonWithType:UIButtonTypeCustom];

    testButton.frame = CGRectMake(150, 100, 100, 100);

    testButton.backgroundColor = [UIColor brownColor];

    testButton.layer.cornerRadius = 50;

    testButton.layer.masksToBounds = YES;

    [self.view addSubview:testButton];

     //用于点击的按钮

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

    button.frame = CGRectMake(100, 250, 200, 50);

    [button setTitle:@"进入下一页" forState:UIControlStateNormal];

    button.backgroundColor = [UIColor brownColor];

    button.layer.cornerRadius = 6;

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

    [self.view addSubview:button];

}

//按钮的触发事件

- (void)clickButton{

    BlockViewController *block = [[BlockViewController alloc]init];

    //block的实现

    block.buttonBlock = ^(UIImage *image){

        [testButton setImage:image forState:UIControlStateNormal];

    };

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

}

@end

在自己创建的BlockViewController.h文件中声明block的方法并且把block当属性使用

#import <UIKit/UIKit.h>

@interface BlockViewController : UIViewController

//block的声明 这里把block当做属性

@property(nonatomic,copy)void(^buttonBlock)(UIImage *image);

@end

在BlockViewController.m文件中实现block的回调

#import "BlockViewController.h"

@interface BlockViewController ()

{

    UIButton *testButton;

}

@end

@implementation BlockViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];

    [self backButton];

}

- (void)backButton{

    testButton = [UIButton buttonWithType:UIButtonTypeCustom];

    testButton.frame = CGRectMake(150, 100, 100, 100);

    [testButton setImage:[UIImage imageNamed:@"头像3.jpg"] forState:UIControlStateNormal];

    testButton.backgroundColor = [UIColor brownColor];

    testButton.layer.cornerRadius = 50;

    [self.view addSubview:testButton];

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

    button.frame = CGRectMake(100, 250, 200, 50);

    [button setTitle:@"返回上一页" forState:UIControlStateNormal];

    button.backgroundColor = [UIColor brownColor];

    button.layer.cornerRadius = 6;

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

    [self.view addSubview:button];

}

- (void)clickButton{

    //block的回调

    self.buttonBlock([UIImage imageNamed:@"头像3.jpg"]);

   //返回到上一页

    [self dismissViewControllerAnimated:YES completion:nil];

}

@end
时间: 2024-10-02 00:33:02

block 代码块 反向传值的相关文章

IOS Block代码块的定义与使用

代码块的本质是和其他的变量类似,不同的是,代码块存储的数据是一个函数体.使用代码块,你可以像调用其他标准函数一样的调用,可以传入参数,并得到返回值.     脱字符是代码块的语法标记.下图表示代码块的定义. 1.代码块的基本使用 //无参数无返回值 void (^myblock)() = ^() { NSLog(@"Hello, World!"); }; myblock(); //带参数无返回值 void (^myblock2)(NSString *string) = ^(NSStri

block代码块介绍

关于block的简单介绍 什么是block? Block是C语言的一个语法特性,同时也是C语言的运行时特性,它很像C中的函数指针,因为你可以像使用函数指针一样的去使用block对象:它也很像C++中的函数对象,因为除了要执行的代码,block还可以携带和block绑定的状态信息. 代码块的结构 代码块的简单赋值与调用 // 将block块赋值给一个变量testblock,然后直接通过变量来调用代码块中的代码 int(^testblock)(int a, int b) = ^(int a, int

Block代码块分析

1.block 在程序运行中保存一段代码 block标志:^ 可以保存代码,有返回值,有形参 2.定义block变量 int (^sumblock)(int, int); 3.block默认可以访问外面的变量,不可以修改外面的局部变量 给局部变量加上_block关键字,这个局部变量就可以在block内部修改 4. //没有形参没有返回值的block void(^myblock)() = ^{ NSLog(@"没有返回值的block"); }; //当调用block时才会执行,调用方法:

iOS:使用block代码块实现事件处理过程中的回调

block是什么,这里就不多加强调了,它的优点: 第一:执行效率高,速度快 第二:使用起来比代理简单,省却不少代码,增强代码美感 有一些小的知识点要强调一下: 第一点:它类似于一个匿名函数,也跟java中的匿名内部类相似,但是,记住,它是一种基本数据类型: 第二点:在类中声明block为属性时,如果使用assgin修饰,那么它被放到了栈中,方法已过就会被销毁,所以,尽量使用copy作为修饰词,这样一来block就被存放到了堆中,生命周期就会延长,保证block不会被立即销毁: 第三点:要防止循环

黑马程序员-block代码块和protocol协议

一.block block是一个变量,这个变量类似c语言中的函数指针,在回调场合用的特别多.它可以封装代码,有返回值有形参.下面通过代码来说明block的定义和使用. 首先来看没有返回值没有形参的block 1 void (^myblock)() = ^{ 2 NSLog(@""); 4 }; 有返回值有形参的block 1 int (^sumblock)(int, int) = ^(int a, int b){ 2 return a + b; 3 }; 4 5 int c = sum

初学Objective - C语法之代码块(block)

一.block声明 1.无参数,无返回值: void (^sayHi)(); 2.有参数,有返回值: NSInteger (^operateOfValue)(NSInteger num); block的声明:返回值类型(^block变量名)(参数列表) 脱字符(^)是块的语法标记 二.block实现 block变量名 = ^返回值类型(参数列表) 1.  sayHi = ^{ NSLog(@"你好"); }; 2. operateOfValue = ^ NSInteger (NSInt

IOS笔记-代码块(微博项目)-1.0

1.gcd子线程block代码块 2.遍历子控件 设置系统控件属性 3.UITabBar_tabBarItem字体颜色设置

Ruby基础类型,动态特性,代码块

#Ruby内置基础数据类型 NilClass,TureClass,FalseClass,Time,Date,String,Range,Struct,Array,Hash #Numerice 1.分为Interger整数类.Interger又分为Fixnum和Bignum. #2.#Float浮点数 #3.Complex复数. #Bury的动态特性 #1.动态执行字符串形式的代码 eval #2.动态获得模块或类中的常量和变量的值 #3.动态为类或对象添加方法 #4.对为知变量和方法的动态处理 #

Scala基础篇-02函数与代码块

1.block 代码块也是表达式,其最终求得的值是最后一个表达式的值. {exp1;exp2} { exp1 exp2 } 2.function def funtionName(param:ParamType):ReturnType{ //function body: expressions } 3.例子 利用字符串插值特性:s"...${...}..." 省略花括号: 原文地址:https://www.cnblogs.com/moonlightml/p/9864560.html