介绍:在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. 18:django 日志系统

    django使用python内建的logging模块去建造自己的系统日志的,如果你想详细了解这个模块的话,请自己去看python的说明文档,这里仅仅介绍django中的日志系统 日志配置包括四个部分: ...

  2. linux命令(43):cal命令

    cal命令可以用来显示公历(阳历)日历.公历是现在国际通用的历法,又称格列历,通称阳历.“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”. 1.命令格式: cal  ...

  3. 在Redis集群中使用pipeline批量插入

    在Redis集群中使用pipeline批量插入 由于项目中需要使用批量插入功能, 所以在网上查找到了Redis 批量插入可以使用pipeline来高效的插入, 示例代码如下: Pipeline p = ...

  4. Linus 谈软件开发管理经验

    原文出处: linuxtoday   译文出处:CSDN // 伯乐在线转注:英文原文写于 2011 年 导读:没有人比Linus Torvalds更了解软件开发项目管理中的酸甜苦辣了.作为Linux ...

  5. 关于在C#对类的属性理解

    在类中都有一些成员.什么是类中的成员呢,我个人理解的是一个类中所应有的属性,方法,字段(因为目前才接触到类.所以类中一些其它应有的东西还不太熟悉),现在只探讨我列举的这几个在类中应有的东西.什么是属性 ...

  6. 感受C#6.0新语法

    作为一门专为程(yu)序(fa)员(tang)考虑的语言,感受一下来自微软的满满的恶意... 1. 字符串内联在之前的版本中,常用的格式化字符串: var s = String.Format(&quo ...

  7. es6扩展运算符及rest运算符总结

    扩展运算符(...) 1.如果一个函数的参数个数不确定,可以用其代替 eg:求若干个数的和 2.改数组的引用为复制一份内存 此刻数组a也发生了变化,因为数组b是a的一个引用 此刻相当于复制了一份a 3 ...

  8. windows系统中,创建临时环境变量

    以servlet-api.jar 包为例 set classpath=%classpath%;C:\apache-tomcat-6.0.37\lib\servlet-api.jar

  9. Java中的冒泡排序(减少比较次数)

    package yzhou.sort; import java.util.Arrays; public class BubbleSort { public static void main(Strin ...

  10. go chapter 6 - map array

    遍历 for i,v := range *arr { // 遍历数组,第一个参数为index, 第二个参数为元素 fmt.Println("---------------") fm ...