UI中的KVO设计模式
2015-09-02 20:35
309 查看
KVO:(key-value-Observer)键值观察者,是观察者设计模式的一种具体实现,基于KVC的技术实现
1.添加关注
注:上面的代码中
参数1:观察者
参数2:观察他的那个键值
参数3:如何观察(NSKeyValueObservingOptionNew:当属性发生变化时,执行方法,并且打印新的值, NSKeyValueObservingOptionOld:当属性发生变化时,执行方法,并且打印改变前的值, NSKeyValueObservingOptionInitial:当属性值被初始化或变化时,执行方法, NSKeyValueObservingOptionPrior:当属性发生变化时,执行两次方法(改变前和改变后,通过notificationIsPrior来判断))
参数4:用于传值
2.为通知中心添加观察者
注:上面的代码中:
NSNotificationCenter,通知中心,继承于NSobject
参数1:观察者
参数2:收到通知,观察者执行的方法
参数3:通知的名字
参数4:传值
关联的方法:
在这里我用个button按钮来做具体开关控制
button关联的方法
当成为观察者后,对象的属性值一旦发生变化,就会执行这个方法
1.添加关注
[kvoGirl addObserver:self forKeyPath:@"hobby" options:(NSKeyValueObservingOptionPrior) context:nil]; kvoGirl.hobby = @"coding"; kvoGirl.hobby = @"music";
注:上面的代码中
参数1:观察者
参数2:观察他的那个键值
参数3:如何观察(NSKeyValueObservingOptionNew:当属性发生变化时,执行方法,并且打印新的值, NSKeyValueObservingOptionOld:当属性发生变化时,执行方法,并且打印改变前的值, NSKeyValueObservingOptionInitial:当属性值被初始化或变化时,执行方法, NSKeyValueObservingOptionPrior:当属性发生变化时,执行两次方法(改变前和改变后,通过notificationIsPrior来判断))
参数4:用于传值
2.为通知中心添加观察者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(paly) name:@"放假" object:nil];
注:上面的代码中:
NSNotificationCenter,通知中心,继承于NSobject
参数1:观察者
参数2:收到通知,观察者执行的方法
参数3:通知的名字
参数4:传值
关联的方法:
- (void)paly { NSLog(@"啪啪啪"); }
在这里我用个button按钮来做具体开关控制
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; button.frame = CGRectMake(100, 100, 100, 100); button.backgroundColor = [UIColor blackColor]; [button setTitle:@"通知" forState:UIControlStateNormal]; [button addTarget:self action:@selector(pressButton) forControlEvents:(UIControlEventTouchUpInside)]; [self.view addSubview:button];
button关联的方法
- (void)pressButton { //发通知 [[NSNotificationCenter defaultCenter] postNotificationName:@"放假" object:nil]; }
当成为观察者后,对象的属性值一旦发生变化,就会执行这个方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { NSLog(@"keyPath:%@", keyPath);//观察的键值 NSLog(@"object:%@", object);//观察的对象 NSLog(@"change:%@", change);//新赋的值 //字典中的kind值,见:NSKeyValueChange NSLog(@"context:%@", context);//传的参数 }
相关文章推荐
- 将UINavigationBar设置为全透明的两种方法
- UI中的KVC:键值编码访问属性的方式
- iOS开发 ----- UIButton
- iOS动画技术——ioS 7UIKit力学
- iOS开发中的UI所有知识点
- UIButtion解耦
- Android:Exported receiver does not require permission解决办法
- iOS开发 ----- UIImageView
- iOS开发 ----- UIView
- POJ 3061 Subsequence(二分/尺取法)
- 黑马程序员之GUI
- FMDB fmdb-master 在UI中使用OC语法对sqlate数据库处理
- easyUI的tree
- easyUI的tree
- 禁用mysql query cache
- IOS中UISearchController搜索框筛选功能实现
- mongo:Criteria和Query
- UIALertView的基本用法与UIAlertViewDelegate对对话框的事件处理方法
- UISearchBar介绍
- UE4 FBX静态网格物体通道