iOS:使用block进行类与类,控制器与控制器之间的传值

简介:

介绍:在iOS中类与类,控制器与控制器之间传值的方式有多种,分别是:单例传值、代理传值、通知传值、block传值或者一些偏好设置也可以用来传值。。。。

每一种传值方式都有各自的优点和缺点,针对不同情况选择符合需要的方式进行传值。这里我比较喜欢block方式传值,个人觉得简单好用,省却了不少代码。

下面简单给一个在控制器之间FirstViewControllerSecondViewController使用block传值的例子:

SecondViewController中:

SecondViewController.h文件

复制代码
//
//  SecondViewController.h
//  block传值
//
//  Created by mac on 16/3/16.
//  Copyright © 2016年 mac. All rights reserved.
//

#import <UIKit/UIKit.h>

/**
 *  定义一个block别名,方便使用,该block返回值为void类型,有一个参数为字符串类型
 */
typedef void (^ReturnValueByBlock)(NSString *text);


@interface SecondViewController : UIViewController
/**
 *  声明一个block变量
 */
@property (copy,nonatomic)ReturnValueByBlock returnBlock;


/**
 *  声明一个实例方法,block代码块作为参数
 */
-(void)returnValue:(ReturnValueByBlock) block;
@end
复制代码

SecondViewController.m文件

复制代码
//
//  SecondViewController.m
//  block传值
//
//  Created by mac on 16/3/16.
//  Copyright © 2016年 mac. All rights reserved.
//

#import "SecondViewController.h"

@interface SecondViewController ()

@end

@implementation SecondViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //返回
    self.view.backgroundColor = [UIColor greenColor];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(back:)];
}

//返回
-(void)back:(UIBarButtonItem *)sender{
    
    [self.navigationController popViewControllerAnimated:YES];
    
    //给block参数赋值
    self.returnBlock(@"我是中国人!");
}

//通过实例方法回传值
-(void)returnValue:(ReturnValueByBlock)block{
    self.returnBlock = block;
}
@end
复制代码

 

FirstViewController中:

FirstViewController.m文件

复制代码
//
//  ViewController.m
//  block传值
//
//  Created by mac on 16/3/16.
//  Copyright © 2016年 mac. All rights reserved.
//

#import "FirstViewController.h"
#import "SecondViewController.h"

@interface FirstViewController ()
@end

@implementation FirstViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //创建按钮
    UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
    btn.center = self.view.center;
    btn.backgroundColor = [UIColor redColor];
    [btn setTitle:@"入栈" forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(push:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
}

//入栈
-(void)push:(UIButton *)sender{

    SecondViewController *secondVC = [[SecondViewController alloc]init];
    [self.navigationController pushViewController:secondVC animated:YES];
    
    //接收回传的值
    [secondVC returnValue:^(NSString *text) {
        NSLog(@"%@",text);
    }];
}
@end
复制代码

 

每次返回时打印结果:

2016-03-16 20:41:45.762 block传值[6511:271329] 我是中国人!

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/5285088.html ,如需转载请自行联系原作者
相关文章
|
12月前
|
iOS开发
iOS 15后设置导航控制器的导航条背景色无效的问题处理
iOS 15后设置导航控制器的导航条背景色无效的问题处理
367 0
|
8月前
|
iOS开发
iOS block修饰符用copy还是strong
iOS block修饰符用copy还是strong
99 0
|
11月前
|
存储 调度 开发者
iOS 子控制器
iOS 子控制器
88 0
|
移动开发 JavaScript weex
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
217 0
|
iOS开发 开发者
iOS开发 - 如何写出漂亮的block
iOS开发 - 如何写出漂亮的block
75 0
|
iOS开发
iOS开发 - 使用UISearchController跳转新控制器时搜索框依然出现
iOS开发 - 使用UISearchController跳转新控制器时搜索框依然出现
104 0
|
iOS开发
iOS开发- 关于Block的几种应用
iOS开发- 关于Block的几种应用
92 0
|
iOS开发 Python
iOS小技能:lldb打印block参数签名
iOS逆向时经常会遇到参数为block类型,本文介绍一个lldb script,可快速打印出Objective-C方法中block参数的类型。
159 0
iOS小技能:lldb打印block参数签名
|
自然语言处理 iOS开发
IOS——Block
IOS——Block
63 0
|
iOS开发
iOS代理 通知 block传值的规范写法
iOS代理 通知 block传值的规范写法
116 0