iOS基础之顺传逆传传值(delegate、block)
写给iOS新手的福利!
在项目中经常会用到传值,根据传值的方向分为顺传(从根控制器到子控制器)和逆传(从子控制器到根控制器)。在这里写了个Demo简单演示了效果,创建了两个控制器:
一个为根控制器,一个为子控制器。
顺传:这种传值方式最为简单,在子控制器中添加一个属性即可。
下面是OtherViewController.h文件
#import <UIKit/UIKit.h> @interface OtherViewController : UIViewController /** 顺传数据 */
@property(nonatomic, copy) NSString *pushString; @end
在根控制器中,跳转时设置传入值
OtherViewController *otherVC = [[OtherViewController alloc] init];
otherVC.pushString = @"从根控制器传入的字符串";
[self.navigationController pushViewController:otherVC animated:YES];
这样就可以在子控制器中获取传入值。
逆传(delegate方式):
下面是OtherViewController.h文件,添加协议方法和代理。
#import <UIKit/UIKit.h> @protocol OtherViewControllerDelegate <NSObject> - (void)popVCWithString:(NSString *)popString; @end @interface OtherViewController : UIViewController /** 代理 */
@property(nonatomic, weak) id<OtherViewControllerDelegate> delegate; @end
在需要传值的时候,使用以下代码传出需要传的值:
if ([self.delegate respondsToSelector:@selector(popVCWithString:)]) {
[self.delegate popVCWithString:@"通过代理从子控制器传回的字符串"];
}
这个时候需要在根控制器(ViewController.m)中进行设置了,设置代理:
OtherViewController *otherVC = [[OtherViewController alloc] init];
// 设置代理
otherVC.delegate = self;
[self.navigationController pushViewController:otherVC animated:YES];
遵守代理协议:
// 遵守代理协议
@interface ViewController ()<OtherViewControllerDelegate>
实现代理方法:
// 代理方法
- (void)popVCWithString:(NSString *)popString
{
// 在这里获取逆传的值
NSLog(@"popString ----- %@", popString);
}
逆传(block方式):
在子控制器(OtherViewController.h)中声明Block,添加Block属性
#import <UIKit/UIKit.h> typedef void(^PopStringBlock)(NSString *popString); @interface OtherViewController : UIViewController /** Block */
@property(nonatomic, copy) PopStringBlock popBlock; @end
在需要传值的时候,使用以下代码传出需要传的值:
self.popBlock(@"通过Block从子控制器传回的字符串");
这个时候只需要在根控制器(ViewController.m)中需要取值的地方调用Block即可:
OtherViewController *otherVC = [[OtherViewController alloc] init];
otherVC.popBlock = ^(NSString *popString) {
// 获取Block方式逆传的值
NSLog(@"popString ----- %@", popString);
};
[self.navigationController pushViewController:otherVC animated:YES];
写的比较简单,关键地方都附上代码了,不明白的可以去看我的Demo: https://github.com/sjxjjx/Delegate_Block 。
iOS基础之顺传逆传传值(delegate、block)的更多相关文章
- 【转】iOS 开发之协议protocal-代理传值delegate
原文网址:http://www.cnblogs.com/wzrong/p/3201938.html 刚开始做iOS开发的时候,对 protocol.delegate 的理解一直都是晕晕乎乎一知半解的状 ...
- ios基础篇(十八)——Delegate 、NSNotification 和 KVO用法及其区别
一.Delegate Delegate本质是一种程序设计模型,iOS中使用Delegate主要用于两个页面之间的数据传递.iphone中常用@protocol和delegate的机制来实现接口的功能. ...
- iOS 再谈 代理传值,block反向传值
本贴的例子是:有A和B两个界面,要实现的效果就是先让A跳转到B,然后B中有个颜色的参数,当B跳转到A时,把这个颜色的参数传递给A,在A中利用这个颜色改变自己界面的颜色. 第1步:在发送者(界面B)中, ...
- IOS笔记047-代理传值和block传值
在两个不同的控制器之间传递数据,可以使用代理传值或者block传值. 例子是一个简单通讯录. 主界面如下: 添加联系人界面 查看/编辑联系人界面:默认是查看模式,点击编辑后进入编辑模式 编辑模式 数据 ...
- iOS基础问答面试
<简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...
- [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)
A.概述 在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能 1.按钮点击后,显示为“已下载”,并且不 ...
- iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)
iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值) 使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: ...
- 【iOS 使用github上传代码】详解
[iOS 使用github上传代码]详解 一.github创建新工程 二.直接添加文件 三.通过https 和 SSH 操作两种方式上传工程 3.1https 和 SSH 的区别: 3.1.1.前者可 ...
- iOS上架ipa上传问题那些事
iOS上架ipa上传问题那些事 原文: http://www.jianshu.com/p/1e22543285c2 字数513 阅读312 评论0 喜欢1 通过xcode直接打包上传,不会提示你的ip ...
随机推荐
- DEV组件LookupEdit,ComboBoxEdit绑定数据源
LookupEdit可以绑定数据表(DataTable)或对象数据组(Object List)作为数据源,下拉窗体可自定显示栏位. 绑定数据源需要设置三个参数:DisplayMember ,Value ...
- cookie、session、sessionid的区别
我们都知道银行,银行的收柜台每天要接待客户存款/取款业务,可以有几种方案: 1.凭借柜台职员的记忆,由收柜台职员来为每位顾客办理存款/取款业务,单凭职员的记忆力,要记到每位顾客的相貌,并迅速这个顾客当 ...
- Spring内部bean无法通过id获取
内部Bean注入正常,但是直接在context中getBean是得不到的: <?xml version="1.0" encoding="UTF-8"?&g ...
- iOS 环信消息撤回
这两天在做环信的消息回撤,在网上找了许久没有这种案例,之后官方的一些方法,但是自己做,还是需要花点时间去整理,所以我决定等我把这个做好之后,分享给大家,如果做的不好多多指教,谢谢- 首先要实现消息撤回 ...
- SoapUI:入门实例
这一章中我们要掌握如下内容: 1) 构建项目: 2) 运行单个请求: 3) 构建测试用例: 4) 接口之间传递参数,组织测试步骤: 5) ...
- HNOI2002(伸展树)
营业额统计 Time Limit:5000MS Memory Limit:165888KB 64bit IO Format:%lld & %llu Submit Status ...
- 照片提取GPS 转成百度地图坐标
感谢: 小慧only http://www.cnblogs.com/zhaohuionly/p/3142623.html GPS转化坐标方法 大胡子青松 http://www.cnblogs.com ...
- 模式字符串匹配问题(KMP算法)
这两天又看了一遍<算法导论>上面的字符串匹配那一节,下面是实现的几个程序,可能有错误,仅供参考和交流. 关于详细的讲解,网上有很多,大多数算法及数据结构书中都应该有涉及,由于时间限制,在这 ...
- C# vs TypeScript - 高级类型
总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...
- vs调试时底部输出调试信息“无法查找或打开 PDB 文件”解决办法
用VS调试程序时,有时会在VS底部的"输出"框中提示"无法查找或打开 PDB 文件".这该怎么解决呢? 下面,我们以VS2013为例,来教大家解决办法. 工具/ ...