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值,见:NSKeyValueChange
    NSLog(@"context:%@", context);//传的参数
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值