---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
self.stu = [[Student alloc] init];
// kvo Key - Value - Observer 键值观察者
// 监控对象里的属性值得变化,只有值发生了变化才会触发方法
// 监听属性的值得变化,一定要用设置器,否则监听失效
// 注册一个监听
[self.stu addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:@"这是监控的文本"];
self.stu.name = @"";
NSLog(@"测试");
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
// 只要监听内容的属性发生了变化就会马上触发这个方法
NSLog(@"%@", change);
}
- (void)dealloc{
// 如果添加观察者, 就要在delloc方法里把对应的观察者移除,如果不移除,可能造成内存问题
[self.stu removeObserver:self forKeyPath:@"name"];
...[super dealloc]
}
// 传值的第四种方法,通知中心
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receive:) name:@"test" object:nil];
// 通过中心监听输入框的内容
// 第一个参数:添加监听的对象,一般都是当前的对象,也就是self
// 第二个参数:监听触发方法
// 第三个参数:监听的名,如果对textField就行jiant,UITextField提供了专门的常量字符串,127行
// 第四个参数:把监听的对象放到最后一位,如果只用于传值,这是nil;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(edditValue:) name:UITextFieldTextDidChangeNotification object:self.myTextField];
- (void)edditValue:(NSNotification *)notifcation{
NSLog(@"%@", self.myTextField.text);
// 这个是用来判断电话号码的正则表达式
NSString *str = @"^((13[0-9])|(147)|(15[^4,\\D])|(18[0,3,5-9]))\\d{8}$";
// 用谓词判断和正则表达式的格式
NSPredicate *cate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", str];
// 然后进行判断,返回一个BOOL类型的结果
BOOL result = [cate evaluateWithObject:self.myTextField.text];
if (result) {
NSLog(@"对");
} else {
NSLog(@"错");
}
}
- (void)dealloc{
// 移除
[[NSNotificationCenter defaultCenter] removeObserver:self];
...
[super dealloc];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"你好啊" message:@"再见?" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"再见" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
} ];
[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
textField.placeholder = @"输入内容";
}];
[alert addAction:cancel];
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
NSLog(@"%@",[alert.textFields[0] text]);
} ];
[alert addAction:defaultAction];
[self presentViewController:alert animated:YES completion:nil];
}