UIAlertController浅见

原创 2017年01月03日 23:19:05

这是最普通的一个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到底是怎样使用了。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

IM系统架构设计之浅见

背景:除去大名鼎鼎的QQ这款即时聊天工具,还有许多细分行业的IM,比如淘宝阿里旺旺、网易泡泡、YY语音......。恰巧公司产品也要开发一款基于我们自己行业的类IM系统,很有幸我担当了这个产品的架构师...

关于嵌入式Linux系统flash分区设计及文件系统格式选择的一些浅见

嵌入式系统应用程序升级是比较频繁的,这就需要将flash进行合理的划分,一般情况,flash 的基本分区都有这几部分: 1.uboot分区 2.kernel分区 3.rootfs分区 这三部分...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

HTML5&Flash之粗知浅见

比较头大的是Flash又插入不进来了,无奈请您移步 点击这里 先去看一段动画展示: 什么是HTML HTML(Hyper Text Mark-up Language)即超文本标记语言。HTML...

DP与贪心算法的一点浅见

DP:考虑且仅仅考虑由前一阶段状态转移到当前状态后,递推并选取出当前状态的最优解,具有无后效性和最优子结构的基本特征,其中所谓的无后效性是指:“下一时刻的状态只与当前状态有关,而和当前状态之前的状态无...

viewport meta 说明及浅见

常见使用 宽度为设备宽度,初始缩放比例为 1 倍,禁止用户缩放 属性说明 width:可设定数值,或者指定为device-width(设备宽度) hei...

ARM内核中寄存器的浅见

ARM内核中寄存器
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)