FBKVOController的使用
来源:互联网 发布:淘宝情趣用品 看不出来 编辑:程序博客网 时间:2024/06/06 01:56
转自:http://www.cnblogs.com/cocoajin/p/3600634.html
iOS kvo 结合 FBKVOController 的使用
一:FBKVOControlloer是FaceBook开源的一个 在 iOS,maxOS上使用 kvo的 开源库;
提供了block和@selector(SEL) 的回调操作,很方便实用;
https://github.com/facebook/KVOController
二:示例:
1
2
3
4
5
6
7
8
9
10
11
fbKVO = [FBKVOController controllerWithObserver:
self
];
[fbKVO observe:personOne keyPath:@
"pName"
options:
NSKeyValueObservingOptionNew
block:^(
id
observer,
id
object,
NSDictionary
*change) {
//NSLog(@"%@ %@ %@",observer,object,change);
//Person *p = (Person *)object;
//self.title = p.pName;
self
.title = change[
NSKeyValueChangeNewKey
];
}];
三:流程操作
1:创建 Person Object
1
2
3
4
5
6
7
#import <Foundation/Foundation.h>
@interface
Person :
NSObject
@property
(
nonatomic
,strong)
NSString
*pName;
@end
2: 下载FBKVOController---导入FBKVOController.h .m文件 ARC环境
1
2
#import "FBKVOController.h"
#import "Person.h"
3:创建Person对象(被观察者),及FBKVOController对象(管理观察者与被观察者);
1
2
3
4
5
@interface
RootViewController ()
{
Person *personOne;
FBKVOController *fbKVO;
}
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
- (
void
)viewDidLoad
{
[
super
viewDidLoad];
self
.title = @
"TEST"
;
listArray = [[
NSMutableArray
alloc]initWithCapacity:5];
[listArray addObject:@
"FBKVOController"
];
personOne = [[Person alloc]init];
personOne.pName = @
"defaultName"
;
fbKVO = [FBKVOController controllerWithObserver:
self
];
[fbKVO observe:personOne keyPath:@
"pName"
options:
NSKeyValueObservingOptionNew
block:^(
id
observer,
id
object,
NSDictionary
*change) {
//NSLog(@"%@ %@ %@",observer,object,change);
//Person *p = (Person *)object;
//self.title = p.pName;
self
.title = change[
NSKeyValueChangeNewKey
];
}];
/**
一:kvo值检测类型;
1: NSKeyValueObservingOptionNew 传递变化之后的值;
2: NSKeyValueObservingOptionOld 传递变化之前的值;
3: NSKeyValueObservingOptionInitial 观察者会在程序初始时,也就是观察变化之前,优化执行一次 观察动作;即上述执行上面 block操作一次;并且传递 默认的值,和以后传递 变化后的值;
4: NSKeyValueObservingOptionPrior 会调用两次观察者操作,值改变之前,值改变之后;
二:获取 kvo的值;
change[NSKeyValueChangeNewKey] 新值;
change[NSKeyValueChangeOldKey] 旧值;
*/
}
4:添加改变 被观察者 Person的pName属性值变化操作,然后在 观察者观察到 pName值发生变化时,改变 self.title的值
1
2
3
4
5
6
7
8
9
10
11
#pragma mark action 点击
- (
void
)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(
NSIndexPath
*)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:
YES
];
int
nums = arc4random()%10;
personOne.pName = [
NSString
stringWithFormat:@
"newName%d"
,nums];
NSLog
(@
"new --> %@"
,personOne.pName);
}
//在 pName属性值发生变化时,改变self.title的值;
1
2
3
4
5
6
7
8
9
10
[fbKVO observe:personOne keyPath:@
"pName"
options:
NSKeyValueObservingOptionNew
block:^(
id
observer,
id
object,
NSDictionary
*change) {
//NSLog(@"%@ %@ %@",observer,object,change);
//Person *p = (Person *)object;
//self.title = p.pName;
self
.title = change[
NSKeyValueChangeNewKey
];
}];
5:如果想移除观察者:
1
2
3
4
//三种方式任你选择;
[fbKVO unobserve:personOne];
[fbKVO unobserve:personOne keyPath:@
"pName"
];
[fbKVO unobserveAll];
6: 效果:
改变值之前
改变值之后
0 0
- FBKVOController的使用
- iOS kvo 结合 FBKVOController 的使用
- FBKVOController的简单实用
- FBKVOController详解
- FBKVOController详解
- FBKVOController实现原理(简单描述)
- GUID使用的使用
- ${}的使用
- 的使用
- @[],@()的使用
- ->的使用
- +、-、*、/、%的使用
- &&的使用
- %:的使用
- Makefile中使用$$的使用
- Makefile中使用$$的使用
- Red5的使用--使用日志
- prefernce的使用具体使用
- Builder模式
- Layout Inflation不能这么用
- Sql Server 循环插入数据
- Alex 的 Hadoop 菜鸟教程: 第3课 Hadoop 安装教程 - 非HA方式 (一台服务器)
- [LeetCode]Merge Two Sorted Lists
- FBKVOController的使用
- WPF:如何在工作线程中更新窗体的UI元素(Dispatcher机制)
- linux下运行Mplayer图形窗口不显示及没反应的解决方法
- Java单例模式的几种写法详解
- 黑马程序员_Java_线程池
- 单元测试,集成测试,系统测试 的区别和联系
- 关于正则表达式的学习整理
- Java AWT绘图
- Asp中addnew与insert into的区别