KVO - NSKeyValueObserving

2018-11-12  本文已影响0人  BabyNeedCare

KVO:

三个步骤:

1. 注册监听

2. 使用回调,对监听对象处理

3. 移除监听

// 使用UITextField 的 text 属性,示例。self.testField = [[UITextFieldalloc] initWithFrame:CGRectMake(0,100,CGRectGetWidth(self.view.bounds),40)];self.testField.backgroundColor = [UIColoryellowColor]; [self.view addSubview:self.testField];// 需要监听的对象 add 观察者 forkey 观察属性 描述内容[self.testField addObserver:selfforKeyPath:@"text"options:(NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew) context:@"输入框的 输入控制"];

4种Option:

NSKeyValueObservingOptionNew=0x01, 新值

NSKeyValueObservingOptionOld=0x02, 旧值

NSKeyValueObservingOptionInitial=0x04, 初始化的值? 

NSKeyValueObservingOptionPrior=0x082次回调,变化前后。

// 当监听对象key 的属性值,变化时,就会有这个回调。

- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context{if([keyPath isEqualToString:@"text"]) {NSString*oldStr = change[NSKeyValueChangeOldKey];NSString*newStr = change[NSKeyValueChangeNewKey];if(newStr.length ==0) {NSLog(@"输入长度不能为0"); }elseif(newStr.length >8) {NSLog(@"输入长度不能大于8"); }else{NSLog(@"cool : %@ 变为 %@",oldStr,newStr); } }}

此处获取变化值时,使用的是对于的 key

FOUNDATION_EXPORTNSString*constNSKeyValueChangeNewKey;FOUNDATION_EXPORTNSString*constNSKeyValueChangeOldKey;FOUNDATION_EXPORTNSString*constNSKeyValueChangeNotificationIsPriorKey; 是否优先回调key。使用NSKeyValueObservingOptionPrior时 ,2次回调,第一次返回值1.FOUNDATION_EXPORTNSString*constNSKeyValueChangeKindKey;FOUNDATION_EXPORTNSString*constNSKeyValueChangeIndexesKey;

// 注意不要重复移除。注册-移除 一对一。

[self.testField removeObserver:selfforKeyPath:@"text"];

上一篇下一篇

猜你喜欢

热点阅读