iOS视图控制器之间delegate传值教程
之前在StackOverFlow上看到一篇讲传值(segue传值和delegate传值)的文章,感觉讲的非常清晰,就将delegate部分翻译了一下。有兴趣能够看看。
原文:
http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers
译文:
为了从ViewControllerB往回传值到ViewControllerA,我们须要使用协议(Protocols)和代理(Delegates)。
为了实现这个过程,我们须要设置ViewControllerA为ViewControllerB的代理。
这样可以使ViewControllerB可以发送消息到ViewControllerA,相同也能使我们将数据回传。
ViewControllerA作为ViewControllerB的代理必需要遵从我们在ViewControllerB中定义的协议(Protocols),这可以告诉ViewControllerA有哪些方法是必需要实现的。
1.在ViewControllerB.h中,在#import和@interface之间(就是代码位置)。我们像以下这样定义我们的协议及协议方法:
|
@classViewControllerB;// @protocol ViewControllerBDelegate <NSObject> |
注:(NSString *)item是我们如今要回传的数据类型,也能够是其它类型,如字典、数组等
2.仍然是在ViewControllerB.h中。设置一个delegate属性,同一时候在ViewController.m中synthesize
|
@property (nonatomic, weak) id <ViewControllerBDelegate>delegate; |
在project中我是这么做的:
@propertyid<SelectPeopleVCDelegate>delegate;
3.在ViewControllerB中,我们在将要从导航控制器中弹出该视图的时候向代理发送消息(消息中含有我们要传递的值)
|
NSString *itemToPassBack = @"Pass this value back to ViewControllerA"; |
在实际project中我是这样完毕的:
- (void)viewDidDisappear:(BOOL)animated
{
[self.delegateaddItemViewController:selfdidFinishSelectPeople:dataSourceArray];
}
注:dataSourceArray是我的数据源,在一个公开变量,在前面的程序中完毕赋值。
4.以上就是全部要在ViewControllerB中进行的操作。接下来就是ViewControllerA的操作。
首先我们要在ViewControllerA.h中导入ViewControllerB,并遵从它的协议:
|
#import "ViewControllerB.h" @interface ViewControllerA :UIViewController <ViewControllerBDelegate> |
5.在ViewControllerA.m中实现协议方法:
|
- (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString |
6.最后,在我们将ViewControllerB压入堆栈之前,我们须要告诉ViewControllerB,ViewControllerA是它的代理(delegate):
|
ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib:@"ViewControllerB" |
在实际project中我是这样做的:
- (void)prepareForSegue:(UIStoryboardSegue
*)segue sender:(id)sender
{
UIViewController * viewController = segue.destinationViewController;
BAGSelectPeopleVC * selectPeopleVC = (BAGSelectPeopleVC
*)viewController;
selectPeopleVC.delegate =self;
}
iOS视图控制器之间delegate传值教程的更多相关文章
- iOS 视图控制器转场详解
iOS 视图控制器转场详解 前言的前言 唐巧前辈在微信公众号「iOSDevTips」以及其博客上推送了我的文章后,我的 Github 各项指标有了大幅度的增长,多谢唐巧前辈的推荐.有些人问我相关的问题 ...
- storyboard三种sugue 和 跳转场景的三种方式 以及控制器之间的传值
Storyboard引入了2个概念:1. scene:一个场景,由一个viewController和相关的xib表示. 2. segue:在这是用于连接scenes,其有多种类型,iphone包括:P ...
- iOS视图控制器的生命周期
今天面试有一道面试题因为回答不好,因为也不经常涉及所以有点模糊,我选择了最保守的回答,没有展开写出我对这个问题的理解. 问题:IOS 开发 loadView 和 viewDidLoad 的区别? 经过 ...
- iOS开发控制器之间传值的几种小方法
在IOS开发中或面试中,经常会遇到,两个或者多个控制器之间传值的问题 ,总结的集中方法仅供参考! 问题 :将B控制器中的textField 输入内容,传到A控制器中的label上显示出来,如何传值? ...
- iOS:使用block进行类与类,控制器与控制器之间的传值
介绍:在iOS中类与类,控制器与控制器之间传值的方式有多种,分别是:单例传值.代理传值.通知传值.block传值或者一些偏好设置也可以用来传值.... 每一种传值方式都有各自的优点和缺点,针对不同情况 ...
- 笔记-iOS 视图控制器转场详解(上)
这是一篇长文,详细讲解了视图控制器转场的方方面面,配有详细的示意图和代码,为了使得文章在微信公众号中易于阅读,seedante 辛苦将大量长篇代码用截图的方式呈现,另外作者也在 Github 上附上了 ...
- iOS 不同类之间的传值
iOS是面向对象开发的,有很多不同的类,很多时候会遇到类与类之间的"交流"需求,比如通知.传递数值等等,(通知可以用nsnotificationcenter来做, 以后总结)下面主 ...
- 学习笔记:iOS 视图控制器(UIViewController)剖析
转自:http://www.cnblogs.com/martin1009/archive/2012/06/01/2531136.html 视图控制器在iOS编程中占据非常重要的位置,因此我们一定要掌握 ...
- iOS 视图控制器转场动画/页面切换效果/跳转动画 学习
一 学习 在 UINavigationController 中 push 和 pop 的转场效果 (基于iOS7 以上的转场方式) 经过学习了解到,重点分三块: (1)pushAnimation: ...
随机推荐
- grunt 前端开发环境搭建
1.找管理员开通gitlab权限 2.下载并安装git工具 3.下载并安装nodejs 4.安装cnpm 5.安装kulor-cli cnpm install -g kulor-cli cnpm in ...
- AV_百度百科
AV_百度百科 AV(影片门类)
- 存几个html画图的网站
http://jvectormap.com/ http://julying.com/lab/raphael-js/docs/#Paper.path http://www.highcharts.com/ ...
- uva 10837 - A Research Problem(欧拉功能+暴力)
题目链接:uva 10837 - A Research Problem 题目大意:给定一个phin.要求一个最小的n.欧拉函数n等于phin 解题思路:欧拉函数性质有,p为素数的话有phip=p−1; ...
- bash on windows
bash on windows 今年微软Build 2016大会最让开发人员兴奋的消息之一,就是在Windows上可以原生运行Linux bash,对开发人员来说,这是一个喜闻乐见的消息. 1 安装 ...
- ASP.NET - 对URL传递的值进行编码Server.UrlEncode()
/// <summary> /// 搜索内容 /// </summary> /// <param name="sender"></para ...
- ASP.NET、WinForm、C# - 配置文件信息读取 [ Web.config || Appconfig ]
<configuration> <appSettings> <add key="name" value="HF_Ultrastrong&qu ...
- Delphi中JSon SuperObject 使用:数据集与JSON对象互转
在delphi中,数据集是最常用数据存取方式.因此,必须建立JSON与TDataSet之间的互转关系,实现数据之间通讯与转换.值得注意的是,这只是普通的TDataset与JSON之间转换,由于CDS包 ...
- 1.1.5-学习Opencv与MFC混合编程之---画图工具 输入文字和填充图像 修改光标
源代码:http://download.csdn.net/detail/nuptboyzhb/3961696 输入文字 l 对话框 1. 插入,资源,选择对话框资源 2. 编辑对话框如下: ...
- 进阶: 案例八: Drag and Drop(动态)
1.节点 2.UI 3. 4.方法: METHOD wddomodifyview . DATA: lo_container TYPE REF TO cl_wd_uielement_container, ...