http://itjoy.org/?p=416

前边介绍过从第一个页面传递数据到第二个页面,那么反过来呢我们该如何操作?还是同一个例子,将第二个页面的字符串传递到第一个页面显示出来,这中形式就可以使用协议来传值,协议我们可以理解成双方规定好一组标准,都满足这个标准我们之间就可以通信,一方通过协议发送数据,另一方通过协议来接受数据。

代码如下:从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;
}

转载于:https://www.cnblogs.com/wangluochong/p/4624575.html

Controller之间传递数据:协议传值相关推荐

  1. 在视图控制器之间传递数据

    我是iOS和Objective-C以及整个MVC范例的新手,但我坚持以下几点: 我有一个充当数据输入表单的视图,我想给用户选择多个产品的选项. 这些产品在另一个带有UITableViewControl ...

  2. android 不同activity之间传递数据

    1> 不同activity之间传递数据: Intent intent=new Intent(); intent.setClass(activity1.this,activity2.class); ...

  3. Vue父组件和子组件之间传递数据

    Vue父组件和子组件之间传递数据 klmhly 已关注 2018.05.19 19:56* 字数 367 阅读 23评论 0喜欢 0 一.概念解析 挂载点: Vue实例的el属性对应的id,vue只会 ...

  4. 不同Activity之间传递数据--Bundle对象和startActivityForResult方法的实现

    首先,由于Activity是Android四大组件之一,如果一个应用程序中包含不止一个Activity,则需要在AndroidManifest.xml文件中进行声明. 例如进行如下的声明(程序中包含两 ...

  5. iphone 使用委托(delegate)在不同的窗口之间传递数据

    iphone 使用委托(delegate)在不同的窗口之间传递数据 在IOS里两个UIView窗口之间传递参数方法有很多,比如 1.使用SharedApplication,定义一个变量来传递. 2.使 ...

  6. vue.js 组件之间传递数据 1

    vue.js 组件之间传递数据 框架 浏览数:437 2017-8-21 组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.如何传递数据 ...

  7. android 活动传递数据,如何在Android应用程序的“活动”之间传递数据?

    我有一种情况,在通过登录页面登录后,每个activity上都会有一个退出button . 点击sign-out ,我将传递已登录用户的session id以便退出. 谁能指导我如何使session i ...

  8. 用WM_COPYDATA消息来实现两个进程之间传递数据

    文着重讲述了如果用WM_COPYDATA消息来实现两个进程之间传递数据. 进程之间通讯的几种方法: 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.常用的方法有   1.使用内存映 ...

  9. Android在片段之间传递数据

    In this tutorial, we'll be developing an application that contains TabLayout, ViewPager and Fragment ...

  10. Matlab App Designer 【04】使用公共函数在两个App之间传递数据

    使用公共函数在两个App之间传递数据 一.两个App之间传递数据的关键所在 1.在主App中建立公共函数 2.副App需要输入参数 3.一个非常简单的官网案例 二.一个非常简单的例子 1.LPL战队 ...

最新文章

  1. IE8下的VML显示问题解决方案
  2. keras 的 example 文件 mnist_sklearn_wrapper.py 解析
  3. 阿里云弹性计算-图形工作站(公测)发布
  4. 别再傻傻地用这些软件G转P了,修复后不稳定的真相在这里
  5. bash编程练习题及答案
  6. leetcode练习(简单总结做过的题)
  7. python全栈开发-json和pickle模块(数据的序列化)
  8. JFreeChart(三)之条形图
  9. ideal pom文件安装到maven库中_java学习之web基础(14)Maven基础学习
  10. java让日志生成日期文件夹_SpringBoot按日期和文件大小生成日志文件到对应日期文件夹...
  11. bing翻译使用-Unity
  12. 数学作图工具_数学趣览X 曾让古希腊人犯怵的三大几何作图难题
  13. 易基因|m6A甲基化修饰在神经元发育和成体神经形成中的作用研究:文献科普
  14. css less使用
  15. linux下动态库的符号冲突、隐藏和强制优先使用库内符号
  16. This is probably not a problem with npm. There is likely additional logging 报错
  17. 【APICloud系列|36】 mobVerify免费短信验证码的实现
  18. 计算机哪所民办学校好,哪所民办高校计算机软件方面好?
  19. android 请假单界面,请假单_表单设计_OA系统_泛普软件
  20. inet_addr实现

热门文章

  1. php $_SERVER详细参数解析
  2. 1年内从2000涨到13000的成长经验分享
  3. iText 实践的目录(the content of iText in Action)
  4. c 如何调用c语言程序设计,c语言程序设计_函数调用c语言程序设计_函数调用.ppt...
  5. class type
  6. 细说OSI七层协议模型及OSI参考模型中的数据封装过程?
  7. python英寸换成厘米代码_Python的新手-尝试将厘米编码为英寸,反之亦...
  8. [渝粤教育] 天津科技大学 人工智能导论 参考 资料
  9. 【渝粤教育】国家开放大学2018年秋季 0706-21T行政管理学导论 参考试题
  10. 【渝粤教育】国家开放大学2018年秋季 1302T护理科研方法 参考试题