美文网首页
KVO - NSKeyValueObserving

KVO - NSKeyValueObserving

作者: BabyNeedCare | 来源:发表于2018-11-12 10:43 被阅读0次

    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"];

    相关文章

      网友评论

          本文标题:KVO - NSKeyValueObserving

          本文链接:https://www.haomeiwen.com/subject/buuqfqtx.html