iOS UIAlertController-针对UIAlert

2016-07-11  本文已影响98人  沙漠骑士

不多说直接代码,原理和UIAlertView一样,它的本质是一个控制器所以推出的方式和控制器一样,而不是原来UIAlertView的show方式,值得注意的是必须要是iOS8.0之后,否则适配会有错误

自己添加一个点击事件
//这段代码我加入了两个textfield,并且对上面的textfield进行了监控,需要注意的是无论在NO,或是OK中,必须要把监听移除
- (void)showClick {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Login" message:@"please input" preferredStyle:UIAlertControllerStyleAlert];
    [alertController addTextFieldWithConfigurationHandler:^(UITextField *textField){
        //监听
        /**
         *  UITextFieldTextDidBeginEditingNotification;
         *  UITextFieldTextDidEndEditingNotification;
         *  UITextFieldTextDidChangeNotification;
         */
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(alertTextFieldDidChange:) name:UITextFieldTextDidChangeNotification object:textField];
        textField.placeholder = @"username";
    }];
    [alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {
        textField.placeholder = @"password";
        textField.secureTextEntry = YES;
    }];
/**
     *  UIAlertActionStyleDefault
     *  UIAlertActionStyleCancel,
     *  UIAlertActionStyleDestructive 体现出红字,主要用在删除等操作
     */
    UIAlertAction *cancel=[UIAlertAction actionWithTitle:@"NO" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
//点击NO的操作
        //移除监听
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:nil];
    }];
    UIAlertAction *defult = [UIAlertAction actionWithTitle:@"YES" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
//点击YES的操作
        UITextField *login = alertController.textFields.firstObject;
        UITextField *password = alertController.textFields.lastObject;
        NSLog(@"login:%@",login.text);
        NSLog(@"password:%@",password.text);
        //移除监听
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:nil];
        [self presentViewController:[[TestViewController alloc]init] animated:YES completion:nil];
        
    }];
  
    [alertController addAction:cancel];
    [alertController addAction:defult];
    defult.enabled = NO;
    [self presentViewController:alertController animated:YES completion:nil];
}
监听方法
- (void)alertTextFieldDidChange:(NSNotification *)notification{
    UIAlertController *alertController = (UIAlertController *)self.presentedViewController;
    if (alertController) {
        UITextField *login = alertController.textFields.firstObject;
        UIAlertAction *okAction = alertController.actions.lastObject;
        okAction.enabled = login.text.length > 10;
//        okAction.enabled = [YLUtlis checkTelNumber:login.text];//此处自己可以使用正则
    }
}
显示的效果
Paste_Image.png

我的主页
沙漠骑士

上一篇下一篇

猜你喜欢

热点阅读