您的位置:首页 > 产品设计 > UI/UE

UI中的KVO设计模式

2015-09-02 20:35 309 查看
KVO:(key-value-Observer)键值观察者,是观察者设计模式的一种具体实现,基于KVC的技术实现

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);//传的参数
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: