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到底是怎样使用了。

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

相关文章推荐

UIAlertController

  • 2015年11月05日 13:12
  • 56KB
  • 下载

JavaScript中Function和var 的预解析(浅见)

读完此篇文章将占用您7分钟JavaScript(下列简称JS)的预解析主要有函数参数,函数声明,var变量的声明。JS中语句执行步骤为: 1.自身函数参数 ...

UC_gui浅见

  • 2015年01月27日 10:36
  • 70KB
  • 下载

关于p2p网络技术的一些浅见

  • 2010年12月13日 22:07
  • 712KB
  • 下载

ARM内核中寄存器的浅见

ARM内核中寄存器

C#中const与readonly的区别之浅见

之前在写C#代码时一直没有认真思考过const与readonly的区别,都是用的比较随意,只知道说这两个关键字一个是不变常量并且无法修改,一个是只读不能进行写操作。然后看过一些文章之后觉得之前理解的太...

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

转自:http://blog.csdn.net/wuquan_1230/article/details/7985817 嵌入式系统应用程序升级是比较频繁的,这就需要将flash进行合理的划分,一...
  • adazone
  • adazone
  • 2015年04月15日 22:17
  • 717

IM系统架构设计之浅见

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

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

嵌入式系统应用程序升级是比较频繁的,这就需要将flash进行合理的划分,一般情况,flash 的基本分区都有这几部分: 1.uboot分区 2.kernel分区 3.rootfs分区 这三部分...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UIAlertController浅见
举报原因:
原因补充:

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