本文主要是介绍UI中的KVO设计模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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值,见:NSKeyValueChangeNSLog(@"context:%@", context);//传的参数
}
这篇关于UI中的KVO设计模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!