- 浏览: 587806 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
-
JYY282:
[i][/i]
Ecshop与Shopex的比较 -
qq247890212:
我也遇见这问题了,真诡异。重新下载个猫换了就好了。 太浪费时间 ...
诡异:ClassNotFoundException: org.springframework.web.filter.CharacterEncoding
From:http://blog.csdn.net/whaomian/article/details/6802162
个View之间的传值可以有多种方式。但本人觉得最合理最自然并且最安全的方式是通过Delegate方式。
设想一个场景:
1. 有两个View,分别是A和B。
2. 点击A中的某个按钮,出来B。
3. 对B做某些操作(比如输入文字到textField,选择picker等等)。
4. 然后点击B中的确定按钮,将在B中进行的操作所产生的数据传递给A。
这种应用场景在编写iPhone App应用的时候是十分常见的,比如利用modelview来进行某些条件的选择,进行注册操作等等。下面具体说说利用Delegate是如何将View B中的数据传递回View A。
第一步:
在B类的类定义之前加入一下代码,定义一个delegate:
- @protocol ViewBControllerDelegate <NSObject>
- - (void) viewAWillDoThisAction:(UIViewController *) currentView;
- @end
这个delegate定义了一个方法,所有实现了这个delegate的类都必须实现这个方法。
然后再在B类的类定义中添加一个member,加入以下代码:
- NSObject<FilterSpotsViewControllerDelegate> *view_A;
从名字来看,就知道待会这个值会被赋予View A。
第二步:
让A类实现ViewBControllerDelegate:
- @interface ViewAController : UIViewController <ViewBControllerDelegate>
并且让A类实现方法viewAWillDoThisAction:
- - (void) viewAWillDoThisAction:(UIViewController *) view_B {
- //利用view_B来传值。如self.a = view_B.a;
- }
上面代码中,将会在B类中将B类自己(self)的指针传递给view_B(见下面第四步)。这样就可以把B类的数据传递给A类了。
第三步:
就如我之前所说的,View A点某个按钮之后,出现View B。假设这个按钮对应的方法是“-(void) pushViewB: (id) sender"。那么应在这个方法中将A类自身的指针(self)传递给之前第一步在B类中定义的成员变量View_A:
- -(void) pushViewB: (id) sender {
- //初始化一个B类,view_B
- view_B.view_A = self; //赋值
- //推出View B
- }
第四步:
在B类,假设在View B中做完所有操作之后,点击确定按钮,返回View A,并将数据传回给view A。假设这个确定按钮的方法是-(void)done: (id) sender。那么需要在这个方法中调用A类实现的viewAWillDoThisAction:
- -(void) done: (id) sender {
- [self.view_A viewAWillDoThisAction:self];
- //返回View A
- }
上面代码注意两个问题:第一是调用view A的实现了delegate的方法,第二是将自身的指针传递给view A的方法,以方便view A能取到view B的数据。
以上就是整个利用delegate机制来进行两个view之间的传值的过程。这里注意一点:这两个view之间是有关系的(view A推出view B,从view B推出view A)。对于两个完全没有关系的view,如何传值呢?理论上利用delegate也是可以的,但并不是最好的方法。最好的方法是利用NSNotification,留到日后再说。
多嘴一点,其实说是利用delegate的方式来传值,其本质是传递类的指针来进行类成员的传值(实现了delegate的类A将自身传给了类B,然后类B又将自身传回去给类A),之所以用到delegate的机制,只不过是为了说明这个顺序:当B进行了某个操作的时候,需要A去做另外一件事。这就是delegate的本质。也就是我文章开头所说“最合理最自然”的原因。
发表评论
-
Objective-C 与 C++ 的异同
2013-04-02 12:03 1654http://www.cnblogs.com/y041039 ... -
Cocos2D-X是全球知名的开源跨平台手机游戏引擎
2013-01-22 10:05 2780http://www.oschina.net/p/cocos ... -
iOS Keyboard 键盘高度变化 自适应
2013-01-15 15:43 3495[[NSNotificationCenter default ... -
iOS使用自定义字体
2012-11-27 12:11 12180From: http://blog.csdn.net/csy1 ... -
4 款类似 Facebook/Path 切换效果的 iOS 组件
2012-11-27 12:03 2232From: http://blog.csdn.net/lia ... -
Path 2.0的UI界面设计详细介绍
2012-11-27 11:56 1496如Path的创始人Dave Morin ... -
史上最全的App Store邮箱列表
2012-11-27 11:51 1290From: http://roybaby.blog.51cto ... -
iOS从info.plist 获取项目的名称及版本号
2012-11-16 10:54 1709From: http://blog.sina.com.cn/s ... -
MapKit annotation drag and drop with callout info update
2012-10-13 10:38 2441http://hollowout.blogspot ... -
NSArray 或NSDictionary 调用writeToFile方法失败原因
2012-08-31 10:03 4528NSArray 或NSDictionary 调用writeTo ... -
如何让IOS应用从容地崩溃
2012-08-30 15:25 1641From: http://www.cocoachina.com ... -
iOS中判断设备系统版本
2012-08-29 17:17 31736在iOS开发中,经常要考虑系统的向下兼容,如果使用 ... -
iOS 汉字转拼音
2012-08-21 16:42 1493From: http://www.cnblogs.com/v2 ... -
iOS模拟器截图工具
2012-08-17 16:35 1698From: http://magicalboy.com/ios ... -
XCode下的iOS单元测试
2012-08-10 17:47 1197From: http://mobile.51cto.com/ ... -
AFNetworking
2012-08-08 10:54 4670AFNetworking on github: https:/ ... -
Wrapping Conventions
2012-08-01 15:54 879Wrapping Conventions ... -
Core Animation如何使显式动画结束时的值直接作用Layer
2012-08-01 14:51 3815(1)使用隐式动画会直接改变layer的属性值,如: ima ... -
How To Debug Memory Leaks with XCode and Instruments Tutoria
2012-07-31 16:30 1078From: http://www.raywenderlich. ... -
Using Properties in Objective-C Tutorial
2012-07-31 16:27 955From: http://www.raywenderlich. ...
相关推荐
本文将深入探讨如何在iOS的视图之间使用Delegate来实现数据的传递,以及相关源码和工具的应用。 一、Delegate协议的原理与设置 Delegate协议本质上是一种设计模式,它定义了一组方法,让一个对象(通常被称为委托...
在这个"ios-Tableview以及轮播封装、传值.zip"项目中,我们主要探讨的是如何在Swift中封装轮播图组件和实现TableView的数据传递。 首先,让我们深入理解Swift中的TableView。TableView是一种可以显示列表数据的控件...
遵循这个协议,我们需要实现两个方法:`makeUIView(context:)`用于创建UIKit视图,`updateUIView(_:context:)`用于更新已存在的视图。例如,如果我们想要在SwiftUI中使用一个`UILabel`,我们可以这样实现: ```...
这个项目的核心概念是代理和动画,这两个都是iOS开发中至关重要的技能。 首先,让我们深入理解代理模式。代理模式是一种设计模式,它允许一个对象代表另一个对象进行交互,起到中间人的作用。在iOS开发中,特别是在...
在iOS开发中,我们经常会遇到两个常见的问题:一是键盘弹出时遮挡了屏幕下方的输入框,导致用户无法看到正在输入的内容;二是不同View之间的数据传递,这在多个界面间进行信息交互时尤为重要。本篇文章将通过一个...
本文将详细讲解两种主要的传值方式:顺传(正向传递)和逆传(反向传递),这两种方法通常使用代理协议来实现。 **顺传(正向传递)** 顺传是指从父视图控制器向子视图控制器传递数据。这里以A控制器向B控制器传递...