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

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

下面简单给一个在控制器之间FirstViewController和SecondViewController使用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(, , , )];
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

每次返回时打印结果:

-- ::45.762 block传值[:] 我是中国人!

iOS:使用block进行类与类,控制器与控制器之间的传值的更多相关文章

  1. iOS 基于MVC设计模式的基类设计

    iOS 基于MVC设计模式的基类设计 https://www.jianshu.com/p/3b580ffdae00

  2. 【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法

    . 一. 类定义 类定义需要实现两部分 : -- 接口部分 : 定义类的成员变量和方法, 方法是抽象的, 在头文件中定义; -- 实现部分 : 引入接口部分的头文件, 实现抽象方法; 1. 接口部分定 ...

  3. (NO.00004)iOS实现打砖块游戏(六):反弹棒类

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 打砖块游戏另一个要素是反弹棒,我们在这篇类来实现反弹棒类. 创建 ...

  4. 有趣 IOS 开展 - block 使用具体解释

    Block 它是iOS于4.0新的程序语法之后,于iOS SDK 4.0之后,block应用几乎无处不在. 在其他语言中也有类似的概念,称为闭包(closure),实例object C兄弟swift ...

  5. iOS中block的用法 以及和函数用法的区别

    ios中block的用法和函数的用法大致相同 但是block的用法的灵活性更高: 不带参数的block: void ^(MyBlock)() = ^{}; 调用的时候  MyBlock(); 带参数的 ...

  6. ios开发 block语句块

    ios开发 block语句块 1.block 理解为匿名函数 2.block变量的定义 //定义block变量,^表示定义block //技巧:函数名左右加括号,在函数名前面在加^ void (^bl ...

  7. iOS中Block介绍(一)基础

    ios开发block的使用指南,以及深入理解block的内存管理,也适用于osx开发.讨论范围:block的使用,内存管理,内部实现.不包含的内容:gc arc下的block内存,block在c++中 ...

  8. iOS中Block介绍 基础

    ios开发block的使用指南,以及深入理解block的内存管理,也适用于osx开发.讨论范围:block的使用,内存管理,内部实现.不包含的内容:gc arc下的block内存,block在c++中 ...

  9. iOS开发--Block

    iOS开发--Block 1.什么是Block,block 的作用 ui开发和网络常见功能实现回调,按钮的事件处理方法是回调方法以及网络下载后的回调处理 (1)按钮 target-action   一 ...

随机推荐

  1. Django-分頁組件

    一.仿django分页功能自己实现 urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from django.contrib imp ...

  2. 机器学习方法(七):Kmeans聚类K值如何选,以及数据重抽样方法Bootstrapping

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入.我的博客写一些自己用得到东西,并分享给 ...

  3. vmware + ubuntu 64 安装 node.js v8.9.3

    第一次使用虚拟机,第一次使用linux系统,第一次安装使用node.js 虚拟机安装不用多说,安装好之后下载ubuntu 64位版本文件 在vm中点击“创建新的虚拟机”,选择下载的ubuntu iso ...

  4. node-java模块

    node-java模块 node-java使得开发人员,可以调用java优秀的jar包资源.有些方法逻辑,可能node不容易实现,但是java就可以很方便去做.这个时候,就可以使用node-java这 ...

  5. JavaScript 闭包(随笔)

    闭包,伟大的闭包.... 先看看百科对百度的定义是什么样的. 百科说:闭包是指可以包含自由(未绑定到特定对象)变量的代码块:这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境 ...

  6. web资料收集

    Web安全资料:https://github.com/CHYbeta/Web-Security-Learning http://blog.pentestbegins.com/2017/07/21/ha ...

  7. Linux操作命令(四)

    本次实验将介绍 Linux 命令中 which.whereis.locate 命令的用法. which whereis locate 1.which which命令的作用是,在PATH变量指定的路径中 ...

  8. Python开发基础-Day2-流程控制、数字和字符串处理

    流程控制 条件判断 if单分支:当一个“条件”成立时执行相应的操作. 语法结构: if 条件: command 流程图: 示例:如果3大于2,那么输出字符串"very good" ...

  9. Codeforces 500 E. New Year Domino

    \(>Codeforces \space 500 E. New Year Domino<\) 题目大意 : 数轴上有序排列着 \(n\) 块多米诺骨牌, 第 \(i\) 块骨牌坐标为 \( ...

  10. 【二分】Jessica's Reading Problem

    [POJ3320]Jessica's Reading Problem Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1309 ...