KVO---视图间数据的传递:标签显示输入的内容【多个视图中】
RootViewController.m
#import "ModalViewController.h"
@interface RootViewController ()
@end
@implementation RootViewController {
ModalViewController *modalCtrl;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor redColor];
UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 20)];
textLabel.tag = 100;
textLabel.backgroundColor = [UIColor orangeColor];
[self.view addSubview:textLabel];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(50, 150, 100, 30);
[button setTitle:@"打开" forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
modalCtrl = [[ModalViewController alloc] init];
//监听modal控制器的text属性
[modalCtrl addObserver:self forKeyPath:@"text"
options:NSKeyValueObservingOptionNew
context:NULL];
}
//KVO触发方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"text"]) {
NSString *text = [change objectForKey:@"new"];
UILabel *label = (UILabel *)[self.view viewWithTag:100];
label.text = text;
}
}
- (void)buttonAction
{
[self presentViewController:modalCtrl animated:YES completion:NULL];
}
ModalViewController.m
@interface ModalViewController ()
{
NSString *_text;
}
@end @implementation ModalViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
} - (void)viewDidLoad
{
[super viewDidLoad]; self.view.backgroundColor = [UIColor greenColor]; UITextField *textFiled = [[UITextField alloc] initWithFrame:CGRectMake(50, 60, 160, 30)];
textFiled.tag = 100;
textFiled.delegate = self;
textFiled.borderStyle = UITextBorderStyleRoundedRect;
[self.view addSubview:textFiled];
//显示键盘
[textFiled becomeFirstResponder]; UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(50, 150, 100, 30);
[button setTitle:@"返回" forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button]; } //按钮点击事件
- (void)buttonAction
{
[self dismissViewControllerAnimated:YES completion:NULL]; // UITextField *field = (UITextField *)[self.view viewWithTag:100];
// NSString *text = field.text; // self.text = text; } #pragma UITextField delegate //点击return调用的协议方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField { //收起键盘
[textField resignFirstResponder]; return YES; } - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSLog(@"string:%@",string);
// string 是正在输入的最后一个字符 NSLog(@"%@",textField.text);
// textField.text 是输入的内容的前段字符(最后一个字符不包含) // UITextField *field = (UITextField *)[self.view viewWithTag:100];
// NSString *text = field.text;
NSString *str = [NSString stringWithFormat:@"%@%@",textField.text,string];
NSLog(@"str:%@",str);
self.text = str; return YES; }
KVO---视图间数据的传递:标签显示输入的内容【多个视图中】的更多相关文章
- Python多进程-进程间数据的传递
两个进程间的数据是独立的,要进行数据传递的话可通过几个方法 Queue 通过队列来进行进程间数据的传递 # -*- coding:utf-8 -*- __author__ = "MuT6 S ...
- ASP.NET MVC5中View-Controller间数据的传递
使用ASP.NET MVC做开发时,经常需要在页面(View)和控制器(Controller)之间传递数据,那么都有哪些数据传递的方式呢? 本文对于View向Controller中传值共列举了以下几种 ...
- Acitivity间数据的传递
使用startActivityForResult方法进行数据传递. MainActivity.java: public class MainActivity extends Activity { ...
- pyqt5:标签显示文本框内容
文本框(lineEdit)输入文本,标签(label)就会显示文本框的内容. 原理如下: 输入文本时,lineEdit控件发射信号textChanged(),label收到后触发setText()槽. ...
- qtableview 鼠标划过单元格弹出标签显示单元格内容
QStandardItem *item = new QStandardItem(show_content); infoTableModel->setItem(1, 1, item); item- ...
- Android零基础入门第83节:Activity间数据传递方法汇总
在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间数据的传递. 一.常用数据类型 在前面几节我们只学习了一些常用类型的数据传 ...
- C#不同窗体间数据传递
在做项目中经常会使用不同窗体之间的值,所以就有了传值的概念.最常见的是父子窗体之间的数据传递,比如登录ID,各个窗体都需要知道. 1. 如果很多窗体都需要用到某一窗体的东西,比如登录窗体记 ...
- Struts2(六.用标签显示用户列表及Value Stack和Stack Context)
一.用Struts2标签显示用户列表 原理: 在struts中可以通过在action中将所有用户的信息存入到某个范围中,然后转向userlist.jsp,进行访问 原则: 在jsp网页上,尽量不要出现 ...
- django基础之day09,Forms组件在程序中做了哪些事? 校验数据、渲染标签、展示信息
******************************* Forms组件 *************************************************** Forms组件在 ...
随机推荐
- 在redhat6上装1.8以下的docker
因为目前1.8以上的docker最低要求是3.10的Linux内核,而我的内核版本远低于此. [root@localhost home]# uname -r -.el6.x86_64 鉴于我的vm上有 ...
- 实例化vue发生了什么(详解vue生命周期)
const app = new Vue({ el:"#app', data:{ message:'hello,lifePeriod' }, methods:{ init(){ console ...
- 【Oracle】Rman备份策略
1. 查看可设置参数 RMAN> show all; RMAN configuration parameters for database with db_unique_name DRZ are ...
- 我所理解的monad(4):函子(functor)是什么--可把范畴简单的看成高阶类型
大致介绍了幺半群(monoid)后,我们重新回顾最初引用wadler(haskell委员会成员,把monad引入haskell的家伙)的那句话: 现在我们来解读这句话中包含的另一个概念:自函子(End ...
- mac nwjs入门
NW.js由node-webkit项目发展而来其实很多东西官网上都有.但是鉴于搜索引擎(百度,google)搜索到的相关文章,让人看的很不明白.所以决定写下此篇文章. 官网:https://nwjs. ...
- eas之dep的前置脚本和后置脚本
dep的前置脚本和后置脚本,什么时候写,是这样解释的: 前置脚本是在方法前执行,后置脚本是在方法后执行 1.比如保存扩展,如果你要在保存前校验某个字段的值,你要在前置脚本中写,如果要保存后 ...
- The story of one latency spike
转自:https://blog.cloudflare.com/the-story-of-one-latency-spike/ A customer reported an unusual proble ...
- 为什么要学习vue?
Vue是什么?来看看官方的介绍. Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只 ...
- P1125 笨小猴
P1125 笨小猴 标签:NOIp提高组 2008 云端 难度:普及- 时空限制:1s / 128MB 题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证 ...
- 重置root管理员密码(RedHat、CentOS、Fedora)
重启Linux系统主机并出现引导画面时,按下键盘上的e键进入内核编辑界面. 在Linux16参数这行后面追加"rd.break"参数,然后按下Ctrl+x组合键来运行修改后的内核程 ...