KVO 和 UIAlertViewController

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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


}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值