Controller之间传递数据:协议传值
http://itjoy.org/?p=416
前边介绍过从第一个页面传递数据到第二个页面,那么反过来呢我们该如何操作?还是同一个例子,将第二个页面的字符串传递到第一个页面显示出来,这中形式就可以使用协议来传值,协议我们可以理解成双方规定好一组标准,都满足这个标准我们之间就可以通信,一方通过协议发送数据,另一方通过协议来接受数据。
代码如下:从Second传递数据到First
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;
}
|
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;
}
|
转载于:https://www.cnblogs.com/wangluochong/p/4624575.html
Controller之间传递数据:协议传值相关推荐
- 在视图控制器之间传递数据
我是iOS和Objective-C以及整个MVC范例的新手,但我坚持以下几点: 我有一个充当数据输入表单的视图,我想给用户选择多个产品的选项. 这些产品在另一个带有UITableViewControl ...
- android 不同activity之间传递数据
1> 不同activity之间传递数据: Intent intent=new Intent(); intent.setClass(activity1.this,activity2.class); ...
- Vue父组件和子组件之间传递数据
Vue父组件和子组件之间传递数据 klmhly 已关注 2018.05.19 19:56* 字数 367 阅读 23评论 0喜欢 0 一.概念解析 挂载点: Vue实例的el属性对应的id,vue只会 ...
- 不同Activity之间传递数据--Bundle对象和startActivityForResult方法的实现
首先,由于Activity是Android四大组件之一,如果一个应用程序中包含不止一个Activity,则需要在AndroidManifest.xml文件中进行声明. 例如进行如下的声明(程序中包含两 ...
- iphone 使用委托(delegate)在不同的窗口之间传递数据
iphone 使用委托(delegate)在不同的窗口之间传递数据 在IOS里两个UIView窗口之间传递参数方法有很多,比如 1.使用SharedApplication,定义一个变量来传递. 2.使 ...
- vue.js 组件之间传递数据 1
vue.js 组件之间传递数据 框架 浏览数:437 2017-8-21 组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.如何传递数据 ...
- android 活动传递数据,如何在Android应用程序的“活动”之间传递数据?
我有一种情况,在通过登录页面登录后,每个activity上都会有一个退出button . 点击sign-out ,我将传递已登录用户的session id以便退出. 谁能指导我如何使session i ...
- 用WM_COPYDATA消息来实现两个进程之间传递数据
文着重讲述了如果用WM_COPYDATA消息来实现两个进程之间传递数据. 进程之间通讯的几种方法: 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.常用的方法有 1.使用内存映 ...
- Android在片段之间传递数据
In this tutorial, we'll be developing an application that contains TabLayout, ViewPager and Fragment ...
- Matlab App Designer 【04】使用公共函数在两个App之间传递数据
使用公共函数在两个App之间传递数据 一.两个App之间传递数据的关键所在 1.在主App中建立公共函数 2.副App需要输入参数 3.一个非常简单的官网案例 二.一个非常简单的例子 1.LPL战队 ...
最新文章
- IE8下的VML显示问题解决方案
- keras 的 example 文件 mnist_sklearn_wrapper.py 解析
- 阿里云弹性计算-图形工作站(公测)发布
- 别再傻傻地用这些软件G转P了,修复后不稳定的真相在这里
- bash编程练习题及答案
- leetcode练习(简单总结做过的题)
- python全栈开发-json和pickle模块(数据的序列化)
- JFreeChart(三)之条形图
- ideal pom文件安装到maven库中_java学习之web基础(14)Maven基础学习
- java让日志生成日期文件夹_SpringBoot按日期和文件大小生成日志文件到对应日期文件夹...
- bing翻译使用-Unity
- 数学作图工具_数学趣览X 曾让古希腊人犯怵的三大几何作图难题
- 易基因|m6A甲基化修饰在神经元发育和成体神经形成中的作用研究:文献科普
- css less使用
- linux下动态库的符号冲突、隐藏和强制优先使用库内符号
- This is probably not a problem with npm. There is likely additional logging 报错
- 【APICloud系列|36】 mobVerify免费短信验证码的实现
- 计算机哪所民办学校好,哪所民办高校计算机软件方面好?
- android 请假单界面,请假单_表单设计_OA系统_泛普软件
- inet_addr实现
热门文章
- php $_SERVER详细参数解析
- 1年内从2000涨到13000的成长经验分享
- iText 实践的目录(the content of iText in Action)
- c 如何调用c语言程序设计,c语言程序设计_函数调用c语言程序设计_函数调用.ppt...
- class type
- 细说OSI七层协议模型及OSI参考模型中的数据封装过程?
- python英寸换成厘米代码_Python的新手-尝试将厘米编码为英寸,反之亦...
- [渝粤教育] 天津科技大学 人工智能导论 参考 资料
- 【渝粤教育】国家开放大学2018年秋季 0706-21T行政管理学导论 参考试题
- 【渝粤教育】国家开放大学2018年秋季 1302T护理科研方法 参考试题