Controller之间传递数据:协议传值
前边介绍过从第一个页面传递数据到第二个页面,那么反过来呢我们该如何操作?还是同一个例子,将第二个页面的字符串传递到第一个页面显示出来,这中形式就可以使用协议来传值,协议我们可以理解成双方规定好一组标准,都满足这个标准我们之间就可以通信,一方通过协议发送数据,另一方通过协议来接受数据。
代码如下:从Second传递数据到First
Objective-C
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | ///////////////////////// /////////FirstViewController.h//////////// #import <UIKit/UIKit.h> #import "SecondViewController.h" @interface FirstViewController : UIViewController<UITextFieldDelegate,SendMessage>  //遵守SendMessage协议 @property (nonatomic, retain) UILabel *nameLable; @end ///////////FirstViewController.m - (void)viewDidLoad {     [super viewDidLoad];     self.nameLable = [[[UILabel alloc]initWithFrame:CGRectMake(10, 10, 300, 60)]autorelease];     self.nameLable.textAlignment = UITextAlignmentCenter;     self.nameLable.font = [UIFont systemFontOfSize:50];     self.nameLable.textColor = [UIColor blueColor];     [self.view addSubview:self.nameLable];     UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];     button.frame = CGRectMake(130, 170, 60, 40);     [button setTitle:@"下一个" forState:UIControlStateNormal];     [button addTarget:self action:@selector(pushNext:) forControlEvents:UIControlEventTouchUpInside];     [self.view addSubview:button]; } - (void)pushNext:(id)sender {     //初始化second     SecondViewController *second = [[SecondViewController alloc]init];     //设置代理,由谁去执行     second.delegate = self;     //推过去     [self.navigationController pushViewController:second animated:YES];     [second release]; } //实现协议的方法 - (void)sendValue:(NSString *)str {     //赋值操作     self.nameLable.text = str; } | 
Objective-C
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | //////////////////////// //////////////////SecondViewController.h #import <UIKit/UIKit.h> @protocol SendMessage; @interface SecondViewController : UIViewController<UITextFieldDelegate> @property(nonatomic, assign)id<SendMessage> delegate;  @end ///协议的定义,包含一个方法。 @protocol SendMessage <NSObject> - (void)sendValue:(NSString *)str; @end /////////////SecondViewController.m - (void)viewDidLoad {     [super viewDidLoad];     UITextField *textFd = [[UITextField alloc]initWithFrame:CGRectMake(10, 10, 300, 150)];     textFd.borderStyle = UITextBorderStyleRoundedRect;     textFd.delegate = self;     textFd.tag = 100;     [self.view addSubview:textFd];     [textFd release]; } - (BOOL)textFieldShouldReturn:(UITextField *)textField {     [textField resignFirstResponder];     //如果delegate 是这个类型的就调用这个方法,类似于java中的接口,子类实现接口,可以调用接口中的方法     if ([self.delegate conformsToProtocol:@protocol(SendMessage) ]) {         [self.delegate sendValue:textField.text];     }     return YES; } | 
Controller之间传递数据:协议传值的更多相关文章
- Controller之间传递数据:属性传值
		在项目中,Controller之间传递数据非常之多,这里简单介绍一下属性传值.例如有FirstController 和 SecondController,数据从First传递到Second中,我们如何 ... 
- 【MVC架构】——怎样利用Json在View和Controller之间传递数据
		在MVC架构中,尽管非常多东西和三层非常相似,可是也有非常大的差别.就比方传递数据.在三层架构中,传递数据就仅仅要一层返回,另外一层用同样类型的变量来接收即可了.在MVC中,事实上原理是一样的,Con ... 
- Controller之间传递数据:Block传值
		http://itjoy.org/?p=420 前边我们介绍过属性传值和协议传值,这里介绍一下块传值,块类似于C中的函数指针.在Controller中传递数据非常方便,还是继续上一章的例子,将数据从S ... 
- 【ASP.NET MVC】View与Controller之间传递数据
		1 概述 本篇文章主要从操作上简要分析Controller<=>View之间相互传值,关于页面之间传值,如果感兴趣,可参考我另外一篇文章ASP.NET 页面之间传值的几种方式 . Co ... 
- Activity之间传递数据的方式及常见问题总结
		Activity之间传递数据一般通过以下几种方式实现: 1. 通过intent传递数据 2. 通过Application 3. 使用单例 4. 静态成员变量.(可以考虑 WeakReferences) ... 
- Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口
		package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ... 
- 28、activity之间传递数据&批量传递数据
		import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android ... 
- 【Android 复习】 : Activity之间传递数据的几种方式
		在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ... 
- Android基础知识04—Activity活动之间传递数据
		------活动之间传递数据------ 向下一个活动传递数据: Intent中提供了一系列的putExtra()方法,可以把数据暂存到Intent中,启动另一个活动的时候就可以取出来. 代码: (存 ... 
随机推荐
- 【Javascript】—— 1 方法function的高级特性
			本篇仅仅对于function作简单的讲解,在javascript中function不仅仅是方法,它其实是一个变量,因此拥有自己的属性,并且可以当做参数传递给其他的方法. 那么传统的方法,按照java的 ... 
- ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 2、linux 如何修改只读文件 3、ubuntu安装
			1.ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 答案:需要超级用户权限 sudo 2.linux 如何修改只读文件 答案:可以使用chmod命令,为改文件提供其他的权限.u ... 
- php 字符串的一些操作,以便记忆
			php 字符串的操作 trim($str,'特殊字符')-----去除字符串左右两边的字符,返回字符串 ltrim(),rtrim()--------------------左,由两边,与trim() ... 
- hdu1561 树形dp + 背包
			#include<cstdio> #include<cstring> #include<iostream> #define INF 999999999 using ... 
- org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER
			org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER Eclipse中出现无法找到Maven包 症状:出现org.maven.ide.eclipse.MAVEN2_CL ... 
- Shell编程中Shift的用法
			Shell编程中Shift的用法 位置参数可以用shift命令左移.比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1.$2.$3丢弃,$0不移动.不带参数的shif ... 
- structs环境搭建
			(1)<s:fielderror />放在JSP中,如果没在web.xml中配置filter相关内容,会有The Struts dispatcher cannot be found.从而显 ... 
- 【UVA 11401】Triangle Counting
			题 题意 求1到n长度的n根棍子(3≤n≤1000000)能组成多少不同三角形. 分析 我看大家的递推公式都是 a[i]=a[i-1]+ ((i-1)*(i-2)/2-(i-1)/2)/2; 以i 为 ... 
- BZOJ-1491   社交网络    FLoyd+乱搞
			感觉这两天一直在做乱搞的题... 1491: [NOI2007]社交网络 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1279 Solved: 732 ... 
- POJ3579 Median
			Description Given N numbers, X1, X2, ... , XN, let us calculate the difference of every pair of numb ... 
