您的位置:首页 > 移动开发 > IOS开发

XZ_iOS之使用KVO实现textField在填写完数据时,button可点击且变颜色

2016-07-04 14:18 381 查看
步骤:
1. 注册,指定被观察者的属性,
2. 实现回调方法

3. 移除观察

效果图:当所有的输入框都有值的时候,Button才可以点击


         


//用户输入的值在textField的代理方法中给model赋值,
#pragma mark ---- textFieldDelegate
- (BOOL)textField:(UITextField*)textField
shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string
{

   
NSString
* contentString;

   
if
(string.length==

0
) {

       
if
(textField.text.length>

0) {

            contentString = [textField.textsubstringToIndex:textField.text.length-

1];

        }else

        {

            contentString =
nil;

        }

    }else{

        contentString = [NSStringstringWithFormat:@"%@%@",textField.text,string];

    }

   

   
if
(textField.tag==

102) {//

手机号

       
if
(contentString.length>

11) {

           
return
NO;

        }

       
self.bankModel.bankPhoneNumber=
contentString;

    }elseif

(textField.tag==

101) {//

银行卡号

       
if
(contentString.length>

25) {

           
return
NO;

        }

       
self.bankModel.bankCardNumber=
contentString;

    }

   
return
YES;
}
// model的懒加载时,使用KVO给属性添加观察者;
定义此model为Controller的属性,实例化它,监听它的属性,并显示在当前的View里边
- (XZBankListModel*)bankModel
{

   
if
(!_bankModel) {

       
_bankModel
= [[XZBankListModelalloc]init];

        [_bankModeladdObserver:selfforKeyPath:@"content"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOldcontext:NULL];

        [_bankModeladdObserver:selfforKeyPath:@"bankAddress"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOldcontext:NULL];

        [_bankModeladdObserver:selfforKeyPath:@"bankCardNumber"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOldcontext:NULL];

        [_bankModeladdObserver:selfforKeyPath:@"bankPhoneNumber"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOldcontext:NULL];

    }

   
return
_bankModel;

}
//实现回调方法:当属性的值发生改变的时候,作出相应的视图的改变
-(void)observeValueForKeyPath:(NSString*)keyPath
ofObject:(id)object change:(NSDictionary*)change
context:(void*)context

{

   
if
((self.bankModel.bankCardNumber.length>

0)&&(self.bankModel.bankAddress.length>

0)&&(self.bankModel.bankPhoneNumber.length>

0)&&(self.bankModel.content.length>

0)) {

        [self.sureBtnsetBackgroundColor:XZColor(14,93,210)];

       
self.sureBtn.userInteractionEnabled=

YES;

    }else{

        [self.sureBtnsetBackgroundColor:XZColor(188,194,207)];

       
self.sureBtn.userInteractionEnabled=

NO;

    }
}
//增加观察与取消观察是成对出现的:移除观察者
- (void)dealloc

{

    [self.bankModelremoveObserver:selfforKeyPath:@"content"];

    [self.bankModelremoveObserver:selfforKeyPath:@"bankAddress"];

    [self.bankModelremoveObserver:selfforKeyPath:@"bankCardNumber"];

    [self.bankModelremoveObserver:selfforKeyPath:@"bankPhoneNumber"];
}

小结

KVO这种编码方式使用起来很简单,很适用于model修改后,引发的UIVIew的变化这种情况,就像上边的例子那样,当更改属性的值后,监听对象会立即得到通知。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: