KVC、Block块、协议(delegate)和通知中心(Notification)的传值实践

一、KVC的传值

: KVC也就是key-value-coding(键值编码),简而言之就是通过key值去进行赋值和取值。主要是是操作对象的属性。

  • 几个常用的方法:
 * setValue:forKey:(为对象的属性赋值)
 * setValue: forKeyPath:(为对象的属性赋值(包含了 setValue:forKey:的功能,并且还可以对对象内的类的 属性进行赋值))
 * valueForKey:(根据key取值)
 * valueForKeyPath:(根据keyPath取值)

:补充:KVO的用法

KVO也就是key-value-observing(即键值观察),利用一个key来找到某个属性并监听其值得改变。用法如下:
  * 添加观察者
  * 在观察者中实现监听方法,   observeValueForKeyPath: ofObject: change: context:(通过查阅文档可以知道,绝大多数对象都有这个方法,因为这个方法属于NSObject)
  * 移除观察者
  • 效果实现
  • 那咋们废话少说,直接看看代码怎么实现,如下图所示是模拟器的效果,我要实现把第一个视图控制器里的Label里面的text传给下一个视图控制器的textField的text,然后编辑第二个视图控制器中的textField的text的值,再传给第一个视图控制器的过程。

  • 第一个视图控制器原始值
屏幕快照 2016-03-29 下午3.00.46.png
  • 第一个视图控制器传给第二个视图控制器的值
屏幕快照 2016-03-29 下午3.01.01.png
  • 编辑第二个视图控制器中的值
屏幕快照 2016-03-29 下午3.22.34.png
  • 第二个视图控制器传给第一个视图控制器的值
屏幕快照 2016-03-29 下午3.22.51.png

三、实战代码

屏幕快照 2016-03-29 下午3.26.00.png
屏幕快照 2016-03-29 下午3.26.23.png

二、Block块的传值

:首先,我先说说我的传值过程:我想把第二个控制器中的textField的text文本用Block的方式传到第一个视图控制器里面的Label的text,请看下面:

屏幕快照 2016-03-30 下午3.47.06.png

:首先我定义了一个Block块:ChangeLabelValue作为第二个视图控制器的一个属性,用来把textField的text值在点击返回按钮的时候传给Label的text,所以在back的方法里面实现Block参数的传送(self.textField.text).

  • 在第一个控制器里面
屏幕快照 2016-03-30 下午3.54.52.png

:同样我也搞了一个Block块,是用来接收第二个视图控制器用Block块传过来的值的,如图所示注释:(//将第二个视图控制器的值传给第一个视图控制器)下面的Block方法,这样,再经过KVC的赋值,那么就可以在点击返回按钮的时候将第二个视图控制器里的值传给第一个视图控制器。

三、协议的传值

:首先,我说说我的目的:我想把第一个视图控制器中的Label中的text传给第二个视图控制器里的textField中的text,那么顾名思义,给当前视图控制器即第一个视图控制器设置代理并实现协议的方法即可,所以我在第一个视图控制器中的.h文件里面先搞了一个协议(当然这个协议可以直接单独弄一个),如下图:

屏幕快照 2016-03-30 下午4.12.59.png

:接着在.m文件里面的点击下一页按钮的时候的方法里实现当前控制器中值的传送,首先获取第二个视图控制器对象,并且设置他为当前控制器的代理,如下图:

屏幕快照 2016-03-30 下午4.15.14.png

:接着在第二个视图控制器里面要遵从第一个视图控制器规定的协议并且实现协议中的方法,如图所示:

屏幕快照 2016-03-30 下午4.22.07.png
屏幕快照 2016-03-30 下午4.22.22.png

:那么这样,在点击第一个视图控制器中的按钮的并跳转到第二个视图控制器的时候,就会将Label的text传给第二个视图控制器中的textField的text

四、通知中心的传值

:老规矩,我想让第二个视图控制器中的textField的text值经过通知中心传给第一个控制器,那么我们直接往下看,首先在第一个视图控制器里面的viewDidLoad方法里面注册一个通知,如下图:

//3.注册一个通知(addObserver:通知的响应者,name:当前通知的名字,object:通知的发送者)
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ChangeNextLabelValue:) name:@"ChangeLabelValue" object:nil];
  • 通知的实现方法
//通知的方法
- (void)ChangeNextLabelValue:(NSNotification *)Notification
{
    NSLog(@"%@",Notification);
    NSDictionary *dic = Notification.userInfo;
    self.Label.text = dic[@"value"];
}

:接着在第二个视图控制器里面的返回前一页的方法里面发送一个通知:

//点击返回按钮所做的事
- (void)ForwardPages:(UIButton *)Button
{
   [self dismissViewControllerAnimated:YES completion:nil];
    //发送通知
    NSDictionary *dict = @{@"value":self.TextField.text};
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ChangeLabelValue" object:self userInfo:dict];
}

:最后,记得销毁通知即可:

//销毁通知
- (void)CancelPages
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"ChangeLabelValue" object:nil];
}

:那么这样,第二个视图控制器里面的值就会传给第一个视图控制器

:最后,如果你觉得有啥疑问或者是可以帮助到你的,可以直接说哈!只希望我们大家共同进步!!!谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容