UIAlertController浅见

这是最普通的一个alertcontroller,一个取消按钮,一个确定按钮。

新的alertcontroller,其初始化方法也不一样了,按钮响应方法绑定使用了block方式,有利有弊。需要注意的是不要因为block导致了引用循环,记得使用__weak,尤其是使用到self

上面的界面如下:

如果UIAlertAction *otherAction这种otherAction多几个的话,它会自动排列成如下:

另外,很多时候,我们需要在alertcontroller中添加一个输入框,例如输入密码:

这时候可以添加如下代码:

 [alertControlleraddTextFieldWithConfigurationHandler:^(UITextField *textField) {
       
// 可以在这里对textfield进行定制,例如改变背景色
        textField.backgroundColor =[UIColor orangeColor];
    }];

而改变背景色会这样:

完整的密码输入:


- (void)showSecureTextEntryAlert {
    NSString *title = NSLocalizedString(@"A Short Title Is Best", nil);
    NSString *message =NSLocalizedString(@"A message should bea short, complete sentence.",nil);
    NSString *cancelButtonTitle =NSLocalizedString(@"Cancel", nil);
    NSString *otherButtonTitle =NSLocalizedString(@"OK", nil);

UIAlertController *alertController = [UIAlertControlleralertControllerWithTitle:title message:messagepreferredStyle:UIAlertControllerStyleAlert];
   
    // Add the text field for the secure text entry.
    [alertControlleraddTextFieldWithConfigurationHandler:^(UITextField *textField) {
        // Listen for changes to the text field's text so that wecan toggle the current
        // action's enabled propertybased on whether the user has entered a sufficiently
       // secure entry.

        [[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(handleTextFieldTextDidChangeNotification:)name:UITextFieldTextDidChangeNotification object:textField];

textField.secureTextEntry= YES;
    }];

// Create the actions.
    UIAlertAction *cancelAction =[UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleCancelhandler:^(UIAlertAction *action) {
        NSLog(@"The \"SecureText Entry\" alert's cancel actionoccured.");

// Stop listening for text changed notifications.
        [[NSNotificationCenterdefaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:alertController.textFields.firstObject];
    }];

UIAlertAction *otherAction = [UIAlertActionactionWithTitle:otherButtonTitle style:UIAlertActionStyleDefaulthandler:^(UIAlertAction *action) {
        NSLog(@"The \"SecureText Entry\" alert's other actionoccured.");

// Stop listening for text changed notifications.
        [[NSNotificationCenterdefaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:alertController.textFields.firstObject];
    }];
   
    // The text field initially has no text in the text field,so we'll disable it.
    otherAction.enabled = NO;

// Hold onto the secure text alert action to toggle theenabled/disabled state when the text changed.
    self.secureTextAlertAction =otherAction;

// Add the actions.
    [alertControlleraddAction:cancelAction];
    [alertControlleraddAction:otherAction];
   
    [self presentViewController:alertControlleranimated:YES completion:nil];
}


注意四点:

1.添加通知,监听textfield内容的改变:


// Add the text field for the secure text entry.
    [alertControlleraddTextFieldWithConfigurationHandler:^(UITextField *textField) {
        // Listen for changes to the text field's text so that wecan toggle the current
        // action's enabled propertybased on whether the user has entered a sufficiently
       // secure entry.

        [[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(handleTextFieldTextDidChangeNotification:)name:UITextFieldTextDidChangeNotification object:textField];

textField.secureTextEntry= YES;
    }];


2.初始化时候,禁用“ok”按钮:

otherAction.enabled = NO;

self.secureTextAlertAction =otherAction;//定义一个全局变量来存储

3.当输入超过5个字符时候,使self.secureTextAlertAction YES

- (void)handleTextFieldTextDidChangeNotification:(NSNotification*)notification {
    UITextField *textField =notification.object;

// Enforce a minimum length of >= 5 characters forsecure text alerts.
    self.secureTextAlertAction.enabled =textField.text.length >= 5;
}

4.在“OK”action中去掉通知:


UIAlertAction *otherAction = [UIAlertActionactionWithTitle:otherButtonTitle style:UIAlertActionStyleDefaulthandler:^(UIAlertAction *action) {
        NSLog(@"The \"SecureText Entry\" alert's other actionoccured.");

// Stop listening for text changed notifications.
        [[NSNotificationCenterdefaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:alertController.textFields.firstObject];
    }];


 

最后是以前经常是alertviewactionsheet结合使用,这里同样也有:


- (void)showOkayCancelActionSheet {
    NSString *cancelButtonTitle =NSLocalizedString(@"Cancel", nil);
    NSString *destructiveButtonTitle =NSLocalizedString(@"OK", nil);
   
    UIAlertController *alertController =[UIAlertController alertControllerWithTitle:nil message:nilpreferredStyle:UIAlertControllerStyleActionSheet];
   
    // Create the actions.
    UIAlertAction *cancelAction =[UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleCancelhandler:^(UIAlertAction *action) {
        NSLog(@"The \"Okay/Cancel\" alert action sheet's cancel action occured.");
    }];
   
    UIAlertAction *destructiveAction =[UIAlertAction actionWithTitle:destructiveButtonTitle style:UIAlertActionStyleDestructivehandler:^(UIAlertAction *action) {
        NSLog(@"The \"Okay/Cancel\" alert action sheet's destructive actionoccured.");
    }];
   
    // Add the actions.
    [alertControlleraddAction:cancelAction];
    [alertControlleraddAction:destructiveAction];
   
    [self presentViewController:alertControlleranimated:YES completion:nil];
}


在底部显示如下:

 

好了,至此,基本就知道这个新的controller到底是怎样使用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值