iOS开发控制器之间传值的几种小方法
在iOS开发中或面试中,经常会遇到,两个或者多个控制器之间传值的问题 ,总结的集中方法仅供参考!
问题 :将B控制器中的textField 输入内容,传到A控制器中的label上显示出来,如何传值?
首先在storyboard中添加相关联的控制器(如下):

第一种方法: Block方法
1>在B控制器中定义一个block属性,这个block 是一个返回值为void,参数为NSString(传递textField的值)的block。
2>在B控制器的btw点击事件中,执行block,参数传self.textField.text.
3>在A控制器的-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender方法中 获取segue.destinationViewController,给它的block属性赋一段代码,这段代码就是将传过来的NSString 赋值给label
1》在Bcontroller.h中

2》在Bcontroller.m中

3》在Bcontroller.h中

4》在Bcontroller.m中

第二种方法:代理方法
1>在B控制器中定义协议方法,方法中要有NSString的参数,用来传递B控制器中textField的内容。(谁要传数据谁就定义协议,并添加代理属性).
2>在btn的点击事件中,执行代理的方法。传递参数进去,并且跳转到控制器A控制器.
3>在A控制器中的-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender方法中,设置代理,因为这个方法能获得B控制器,通过 segue.destinationViewController。
4>实现代理方法,将传过来的参数赋值给label。
1》在Bcontroller.h中

2》在Bcontroller.m中

3》在Acontroller.h中

4》在Acontroller.m中

第三种方式:通知方法
1>在B控制器中的btn点击方法中,发布一个通知UITextFieldTextDidEndEditingNotification。
2>在A控制器中添加self为观察者,监听UITextFieldTextDidEndEditingNotification通知,执行方法,方法中含有NSNotification的 参数,参数中就有B控制器中textField中text,赋值即可
1》在Bcontroller.h中

2》在Bcontroller.m中

3》在Acontroller.h中

4》在Acontroller.m中

第四种方法:用NSUserDefaults传值
在Bcontroller中
需要传值的地方编码
//存储数据
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"A界面需要传递的值" forKey:@"自己的KEY"]; //设置同步
[defaults synchronize];
在Acontroller文件中
在ViewDidLoad中编码读取传递过来的值
//读取A界面传递过来的值
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
self.userId = [defaults valueForKey:@"自己的KEY"];
iOS开发控制器之间传值的几种小方法的更多相关文章
- 【iOS开发-30】UITabBarController的几种代理方法以及结合NSUserDefaults还原上次退出时被选中视图控制器和视图控制器的顺序
一.UITabBarController的几种代理方法 在AppDelegate.h中加入一个协议<UITabBarControllerDelegate>.然后再AppDelegate.m ...
- angular开发控制器之间的通信
一.指令与控制器之间通信,无非是以下几种方法: 基于scope继承的方式 基于event传播的方式 service的方式(单例模式) 二.基于scope继承的方式: 最简单的让控制器之间进行通信的方法 ...
- iOS开发之动画编程的几种方法
iOS开发之动画编程的几种方法 IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKe ...
- android fragment传递参数_fragment之间传值的两种方法
在Activity中加载Fragment的时候.有时候要使用多个Fragment切换.并传值到另外一个Fragment.也就是说两个Fragment之间进行参数的传递.查了很多资料.找到两种方法.一种 ...
- ASP.NET 页面之间传值的几种方式
开篇概述 对于任何一个初学者来说,页面之间传值可谓是必经之路,却又是他们的难点.其实,对大部分高手来说,未必不是难点. 回想2016年面试的将近300人中,有实习生,有应届毕业生,有1-3年经验的,有 ...
- 【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- MVC中控制器向视图传值的四种方式
MVC中的控制器向视图传值有四种方式分别是 1 ViewDate 2.ViewBag 3.TempDate 4.Model 下面分别介绍四种传值方式 首先先显示出控制器中的代码 using S ...
- IOS开发中数据持久化的几种方法--NSUserDefaults
IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...
- iOS开发 跳转场景的三种方式
iOS开发 跳转场景的三种方式 2012年10月17日, 15:32 假设A跳转到B,三种方法:1.按住ctrl键,拖动A上的控件(比如说UIButton)到B上,弹出菜单,选择Modal.不需要写任 ...
随机推荐
- 动态使用webservice,以及含有ref类型的参数的问题
public class WSHelper { /// < summary> /// 动态调用web服务 /// < /summary> /// < param name ...
- CodeFile与CodeBehind的区别
引自:http://blog.163.com/wentworth0119@126/blog/static/17321924220122852720103/ asp.net发布项目之后 存在" ...
- PHP session 失效不传递的解决办法
PHP中,session不能传递到下一个页面去,一般有两种情况: 我们先写个php文件:<?=phpinfo()?>, 传到服务器去看看服务器的参数配置. 转到session部分,看到se ...
- ios Toll-Free Bridging
有一些数据类型是能够在 Core Foundation Framework 和 Foundation Framework 之间交换使用的.这意味着,对于同一个数据类型,你既可以将其作为参数传入 Cor ...
- oracle输出多行多列数据
--方法一 匿名块中直接 dbms_output输出declare v_sql varchar2(200); v_cursor sys_refcursor; type v_type is ...
- Hash函数的安全性
我们为了保证消息的完整性,引进了散列函数,那么散列函数会对安全正造成什么影响呢?这是需要好好研究一番的问题. 三个概念: 1.如果y<>x,且h(x)=h(y),则称为碰撞. 2.对于给定 ...
- Oracle 10g 下载地址
Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (32-bit ...
- zabbix 配置
终于把zabbix配置好了.可能还有待优化 我主要参考了几个链接 http://lnmp.org/install.html 一键安装lnmp http://blog.unix178.com/2 ...
- rownum
rownum是一个伪列,oracle数据库会对查找到的数据 从1 开始递增指定每行的rownum值, 当查询条件里有 rownum时(比如 where rownum>2),数据库会依次从数据集里 ...
- PHP 面向对象之自定义类
所谓面向对象就是什么时候什么东西做什么,我们设计类的时候需要想的就是怎么做的内容,那么怎么样的一个类才算是符合OOP的思想呢,答案是:这个类写好之后,在使用的过程中,能准确的代表一个事物,在书写的时候 ...