KVO

作者: lion_xion | 来源:发表于2015-10-28 19:57 被阅读203次

self.stu= [[Studentalloc]init];

// kvc Key - Value - coding

// kvc key - Value - Observer键值观察者

//监控对象里的属性值的变化,只有值发生了变化就会触发方法

//监听属性的值的变化,一定要用设置器,否则监听失效

//注册一个监听

[self.stuaddObserver:selfforKeyPath:@"name"options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNewcontext:@"这是监控的文本"];

self.stu.name=@"张三";

//创建一个button,然后能push到下一页

UIButton*button = [UIButtonbuttonWithType:UIButtonTypeSystem];

button.frame=CGRectMake(100,200,100,50);

[buttonsetTitle:@"下一页"forState:UIControlStateNormal];

[self.viewaddSubview:button];

[buttonaddTarget:selfaction:@selector(click:)forControlEvents:UIControlEventTouchUpInside];

//传值的第四种方法,通知中心

[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(Receive:)name:@"test"object:nil];

//通知中心带回到之前设置的方法里

- (void)Receive:(NSNotification*)notification{

NSLog(@"%@",notification.userInfo);

}

第二个页面

#import"SecondViewController.h"

@interfaceSecondViewController()

@end

@implementationSecondViewController

- (void)viewDidLoad {

[superviewDidLoad];

// Do any additional setup after loading the view.

self.view.backgroundColor= [UIColorwhiteColor];

self.navigationController.navigationBar.translucent=NO;

UIButton*button = [UIButtonbuttonWithType:UIButtonTypeSystem];

button.frame=CGRectMake(100,200,100,50);

[buttonsetTitle:@"返回"forState:UIControlStateNormal];

[self.viewaddSubview:button];

[buttonaddTarget:selfaction:@selector(click:)forControlEvents:UIControlEventTouchUpInside];

}

- (void)click:(UIButton*)button{

[self.navigationControllerpopViewControllerAnimated:YES];

//通过通知中心反方向传值

//通过字典传值

NSDictionary*dic =@{@"1":@"2",@"3":@"4"};

[[NSNotificationCenterdefaultCenter]postNotificationName:@"test"object:niluserInfo:dic];

}

********************************************************************************

UIButton*button = [UIButtonbuttonWithType:UIButtonTypeSystem];

button.frame=CGRectMake(100,200,100,50);

[buttonsetTitle:@"下一页"forState:UIControlStateNormal];

[self.viewaddSubview:button];

[buttonaddTarget:selfaction:@selector(click:)forControlEvents:UIControlEventTouchUpInside];

self.myTextfield= [[UITextFieldalloc]initWithFrame:CGRectMake(100,100,150,50)];

self.myTextfield.layer.borderWidth=1;

self.myTextfield.layer.cornerRadius=10;

[self.viewaddSubview:self.myTextfield];

[_myTextfieldrelease];

//通过中心监听输入框的内容

//第一个参数:添加监听者的对象,一般都是当前文件的对象,也就是self

//第二个参数:监听触发的方法

//第三个参数:监听的名,如果对textfield进行监听,UITextfield提供了专门的常量字符串.127行

//第四个参数:把要监听的对象放到最后一位,如果用于传值,则是nil

[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(changeValue:)name:UITextFieldTextDidChangeNotificationobject:self.myTextfield];

- (void)changeValue:(NSNotification*)notification{

NSLog(@"%@",self.myTextfield.text);

//这个是用来判断电话号码的正确表达式,正则表达式通过自己的语法规则可以用一串表达式判断身份证号等信息,如果需要,就百度

NSString*str =@"^((13[0-9])|(147)|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";

//用谓词来判断当前输入的文本框内容和正则表达式格式是否吻合

NSPredicate*cate = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",str];

//然后进行判断,返回一个BOOL类型的结果

BOOLresult = [cateevaluateWithObject:self.myTextfield.text];

if(result) {

NSLog(@"符合条件");

}else{

NSLog(@"不符合条件");

}

}

- (void)click:(UIButton*)button{

//    SecondViewController *secVC = [[SecondViewController alloc]init];

//    [self.navigationController pushViewController:secVC animated:YES];

//    [secVC release];

UIAlertController*alertVC = [UIAlertControlleralertControllerWithTitle:@"提示"message:@"张阳阳"preferredStyle:UIAlertControllerStyleAlert];

[selfpresentViewController:alertVCanimated:YEScompletion:nil];

//给它添加一个textField

[alertVCaddTextFieldWithConfigurationHandler:^(UITextField*textField) {

textField.placeholder=@"请输入内容";

//把监听内容写在textField添加的方法里

[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(changeText:)name:UITextFieldTextDidChangeNotificationobject:textField];

}];

//添加两个按钮

UIAlertAction*sureAction = [UIAlertActionactionWithTitle:@"确认"style:UIAlertActionStyleDefaulthandler:^(UIAlertAction*action) {

//在里面写点击方法

UITextField*textField = alertVC.textFields[0];

NSLog(@"%@",textField.text);

}];

[alertVCaddAction:sureAction];

//设置按钮是用不了的

sureAction.enabled=NO;

}

- (void)changeText:(NSNotification*)notification{

UIAlertController*alertVC = (UIAlertController*)self.presentedViewController;

UITextField*textField = alertVC.textFields[0];

UIAlertAction*action = alertVC.actions[0];

action.enabled= textField.text.length>5;

}

- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context{

//只要监听的属性内容发生了变化,就会马上触发这个方法

NSLog(@"%@",change);

}

相关文章

  • iOS原理篇(一): KVO实现原理

    KVO实现原理 什么是 KVO KVO 基本使用 KVO 的本质 总结 一 、 什么是KVO KVO(Key-Va...

  • 04. KVO使用,原理,本质

    问题 KVO日常使用 KVO原理(KVO本质是什么) 如何手动触发KVO 直接修改成员变量会触发KVO吗 KVO图...

  • 20.iOS底层学习之KVO 原理

    本篇提纲1、KVO简介;2、KVO的使用;3、KVO的一些细节;4、KVO的底层原理; KVO简介 KVO全称Ke...

  • 深入理解KVO

    iOS | KVO | Objective-C KVO的本质是什么,如何手动触发KVO? 1.什么是KVO KVO...

  • OC语法:KVO的底层实现

    一、KVO是什么二、怎么使用KVO三、KVO的底层实现四、KVO常见面试题 一、KVO是什么 KVO全称Key-V...

  • KVO基本使用

    分三部分解释KVO一.KVO基本使用二.KVO原理解析三.自定义实现KVO 一、KVO基本使用 使用KVO,能够非...

  • KVO 解析

    KVO解析(一) —— 基本了解KVO解析(二) —— 一个简单的KVO实现KVO解析(三) —— KVO合规性K...

  • KVO

    目录 1. KVO的使用1.1 KVO基本使用方法1.2 KVO手动触发模式1.3 KVO属性依赖1.4 KVO容...

  • OC语言之KVO与KVC

    KVO 什么是KVO? KVO 是 Key-value observing(键值观察)的缩写。 KVO是Objec...

  • 可能碰到的iOS笔试面试题(7)--KVO-KVC

    KVC-KVO KVC的底层实现? KVO的底层实现? 什么是KVO和KVC? KVO的缺陷? KVO是一个对象能...

网友评论

      本文标题:KVO

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