Block回调和传值(干货)

如果你还在苦恼block的传值和回调,不妨看看这个Demo,自己整理的,希望对大家有帮助,这是下载地址 https://github.com/ShaoWenLe/BlockTestByValueAndCall-back.git

用的是storyboard结合Xib,如果看着不习惯,可以从上面链接下载源码

//第一界面

//  ViewController.h
//  BlockTestByValueAndCall-back
//
//  Created by 出神入化 on 15/8/15.
//  Copyright (c) 2015年 出神入化. All rights reserved.
//

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *label;

@end

//
//  ViewController.m
//  BlockTestByValueAndCall-back
//
//  Created by 出神入化 on 15/8/15.
//  Copyright (c) 2015年 出神入化. All rights reserved.
//

#import "ViewController.h"
#import "TwoViewController.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    _label.text = @"随便";
}
- (IBAction)next:(id)sender {
    //用blockSelf修饰blockSelf.label 避免block块内部_label被循环引用
    __weak ViewController *blockSelf = self;

    TwoViewController *twoVC = [[TwoViewController alloc] init];
    //block返回值(跟代理写法挺类似的,就是语法不同,代理的话是此处是self.delegate=self;)
    [twoVC getValue:^(NSString *stringValue) {
        NSLog(@"打印block传的数值:%@",stringValue);
        blockSelf.label.text = stringValue;
    }];
    [self.navigationController pushViewController:twoVC animated:YES];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

//第二界面
//
//  TwoViewController.h
//  BlockTestByValueAndCall-back
//
//  Created by 出神入化 on 15/8/15.
//  Copyright (c) 2015年 出神入化. All rights reserved.
//

#import <UIKit/UIKit.h>
//重新定义block类名 void返回值类型 BlockValue类名(重命名类名) NSString *stringValue参数
typedef void(^BlockValue)(NSString *stringValue);
@interface TwoViewController : UIViewController
//block属性  此处要用copy修饰
@property (nonatomic, copy) BlockValue blockValue;
@property (weak, nonatomic) IBOutlet UITextField *textField;

- (void)getValue:(BlockValue)aBlock;
@end

//
//  TwoViewController.m
//  BlockTestByValueAndCall-back
//
//  Created by 出神入化 on 15/8/15.
//  Copyright (c) 2015年 出神入化. All rights reserved.
//

#import "TwoViewController.h"
#import "BlockDataHandle.h"
@interface TwoViewController ()

@end

@implementation TwoViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // Do any additional setup after loading the view from its nib.
}

- (void)getValue:(BlockValue)aBlock
{
    self.blockValue = aBlock;
}

//回调button
- (IBAction)callback:(id)sender {
    BlockDataHandle *blockdataHandle = [[BlockDataHandle alloc] init];
    //回调blockdataHandle,传进去@"123",出来的string
    [blockdataHandle getData:@"123" block:^(NSString *string) {
        NSLog(@"打印回调之后的数据%@",string);
    }];

}
//返回按钮
- (IBAction)back:(id)sender {
    //判断是否执行setBlock方法,然后再执行里面的操作
    if (self.blockValue) {
        self.blockValue(_textField.text);
    }
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end

//回调数据处理类
//
//  blockData.h
//  BlockTestByValueAndCall-back
//
//  Created by 出神入化 on 15/8/15.
//  Copyright (c) 2015年 出神入化. All rights reserved.
//

#import <Foundation/Foundation.h>
typedef void(^BlockData)(NSString *string);
@interface BlockDataHandle : NSObject
@property (nonatomic, copy) BlockData blockData;
//set方法
-(void)setBlockData:(BlockData)blockData;
//传入参数NSString
- (void)getData:(NSString *)string block:(BlockData)block;
@end

//
//  blockData.m
//  BlockTestByValueAndCall-back
//
//  Created by 出神入化 on 15/8/15.
//  Copyright (c) 2015年 出神入化. All rights reserved.
//

#import "BlockDataHandle.h"

@implementation BlockDataHandle
-(void)setBlockData:(BlockData)blockData
{
    _blockData = blockData;
}

- (void)getData:(NSString *)string block:(BlockData)block
{
        NSString *str = [NSString stringWithFormat:@"ASDFGH%@", string];
    //调用block
     block(str);
}
@end
时间: 2024-10-07 13:32:24

Block回调和传值(干货)的相关文章

在 ZBarSDK 中使用Block回调传值 Block在扫描成功后 变为空

今天,使用ZbarSDk 实现二维码扫描的功能,使用block回调传递扫描成功的获取的值   但是在扫码成功后block 就变为空了.....心塞塞的 代码如下  主页面跳转到扫码界面 //跳转到扫码界面 ReadCodeViewController * readVC = [[ReadCodeViewController alloc]init]; readVC.scanCodeResult = ^(NSString *result) { [self addPcdMerch:result]; };

OC3大回调模式使用总结(三)block回调

OC 3大回调模式使用总结(三)block回调 block 又称 代码块,闭包等 是一个匿名的函数,它可以当做一个对象来使用,只不过这个对象很特殊,是一段代码,他可以保存你写的一段预备性质代码,待某个不确定的事件发生时再调用;事件发生时,它可能会给你传递一些状态参数(回传),来方便你的使用 block常用类型(可以看做一个匿名函数的类型): typedef int(^Add)(int,int);//定义一个block类型 typedef void(^Logg)(NSString *);//有一个

第十篇、自定义UIBarButtonItem和UIButton block回调

// 自定义导航栏左边按钮 self.navigationItem.leftBarButtonItem = [JQBlockedBarButtonItem blockedBarButtonItemWithTitle:@"返回" eventHandler:^{ [weakSelf.navigationController popViewControllerAnimated:YES]; }]; // 声明文件提供常用的接口 @interface JQBlockedBarButtonItem

UIAlertController——之Block回调

iOS8.0之后出现的提示框 =.=,比自己去改block回调要好.

iOS开发-Block回调

关于Block之前有一篇文章已经写过一篇文章Object-C-代码块Block回顾,不过写的比较浅显,不能体现出Block在实际开发中的重要性,关于Block的基础知识,可以参考之前的博客.在实际开发中Block在回调过程中的是非常适合开发使用,不管是苹果的官方的接口还是一些第三方库的接口中都用到了Block回调.很多情况下Block和GCD一起使用,最常见的场景的就是App去后台取数据的过程中是需要时间,数据取成功之后我们才能更新UI页面,这就是最常见的回调的方式,也可以通过Notificat

iOS Block界面反向传值

在上篇博客 <iOS Block简介> 中,侧重解析了 iOS Block的概念等,本文将侧重于它们在开发中的应用. Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C语言的扩展,用来实现匿名函数的特性.用维基百科的话来说,Block是Apple Inc.为C.C++以及Objective-C添加的特性,使得这些语言可以用类lambda表达式的语法来创建闭包.关于闭包,一句话解释简洁明了:闭包就是能够读取其它函数内部变量的函数. 在iOS开发中,Block有很多方面的用途,

iOS 简单易懂的 Block 回调使用和解析

老实说在早前我已经学会了如何使用 Block 来做一些方法回调,传递参数的功能,并且用 Block 简单封装了第三方的网络库(AFNetworking).虽说对 Block 的应用说不上得心应手,但是却是极其地喜欢使用这种设计模式,并且在项目中也大量地使用了. 但是,最近一位即将参加面试的学弟问我,什么是 Block 呢?我蒙圈了,但是毕竟是学长,我假装淡定地反问道:你所理解的 Block 是什么呢?学弟说:是一段封装的代码块,并可以放在任意位置使用,还可以传递数据.我心里暗喜,这孩子还是图样了

iOS block 回调

说明:本文是在了解block基础知识基础上的应用,假定阅读者已经具备block基础知识. 目的:通过block回调方式将SecondViewController中的值传入到ViewController中,在某些时候,通过block回调,可以避免delegate的繁琐 1,新建Single View Application工程,新建SecondViewController 2,在ViewController中添加UILabel用于显示SecondViewController传过来的值,把label

OC教程6-代码块block回调

OC6-代码块回调 本章教程主要对代码块回调模式进行讲解,已经分析其他回调的各种优缺点和适合的使用场景. 代码块机制 Block变量类型 Block代码封装及调用 Block变量对普通变量作用域的影响 Block回调接口使用 1,代码块机制 苹果公司在iOS4 SDK中首次支持代码块机制,随后代码块机制被广泛应用于各种编码场景,最常见的为回调机制,也成为Block回调. 代码块也称Block.是封装代码的一种机制,也可以称为匿名函数. 使用这种机制可以将一段代码放入一个Block变量中进行存储,