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

原文地址:http://blog.csdn.net/toss156/article/details/7552075】           UIAlertView 是一个十分常用的控件,...
  • u014600626
  • u014600626
  • 2016年03月29日 10:56
  • 413

UIAlertController + UIPickerView完美结合

参照例子:http://www.oschina.net/code/snippet_2450779_53800。。 要将UIPickerView显示在UIAlertController上,需要在tit...
  • zhuzhiyongai
  • zhuzhiyongai
  • 2016年08月05日 09:56
  • 471

改变UIAlertController的标题、内容的字体和颜色

在开发中,弹出框是必不可少的,通常情况下,我们只要弹出系统自带的弹出框就可以。but,在某些情况下,万恶的UI会要求你修改显示文字的大小、颜色,虽然系统自带有一种红色字体的UIAlertAction,...
  • Levilly
  • Levilly
  • 2016年07月28日 16:35
  • 1122

UIAlertController的使用及其自定义

UIAlertController的正常用法 // 上传 - (void)btnClick{     /* preferredStyle有且只有这两种枚举类型      *     UIAle...
  • yejiexiaobai
  • yejiexiaobai
  • 2016年11月01日 13:56
  • 4348

Swift - UIAlertController的简单使用

虽然语法有点变化,但是一样是在iOS8后废弃UIAlertView后才有的新方法,跟Object-C比起来方法稍有变化,但是还能看到原来的影子,效果如下: 看代码:import UIKitcla...
  • CodingFire
  • CodingFire
  • 2016年07月06日 15:15
  • 3086

UIAlertController高级之嵌入其他控件

在编码过程中,我们经常遇到需要这样一个效果,就是弹出框的嵌套; 举个最简单的例子,比如你要选择时间,必然需要一个时间选择器DatePicker.但是这个选择器又是在你点击某按钮时弹出,弹出方式最常见的...
  • q644419002
  • q644419002
  • 2015年02月02日 11:58
  • 1314

iOS 8UIAlertcontroller如何实现 message左对齐 ,title居中显示

实例化alertcontroller之后,可以遍历view的子视图,子视图title和message嵌套了多层父视图,(需要遍历6层subViews), 下面是取title和message的父视图的...
  • tcm455090672
  • tcm455090672
  • 2016年05月27日 09:27
  • 1285

[iOS]UIAlertController各标签属性的改变

[iOS]UIAlertController各标签属性的改变 经常需要设置message左对齐、段间距这些属性 - (IBAction)tapAlertControllerButton:(...
  • u012881779
  • u012881779
  • 2017年03月08日 16:12
  • 607

UIIAlertController的自动消失

自动消失的思路就是添加一个计时器,设置计时器的时间,让UIAlertController 通过dismiss消失 UIAlertController *alert = [UIAlertCon...
  • xiaoliu_iOS
  • xiaoliu_iOS
  • 2016年01月22日 19:24
  • 3713

UIAlertController更改内容样式及插入自定义View

iOS8 之后系统把UIActionSheet和UIAlertView合并为了UIAlertController,使用就不比多说了,但在使用的过程中发现样式是固定的,点进去也未发现可以提供更改多样式的...
  • sdsd13212
  • sdsd13212
  • 2016年10月07日 14:34
  • 3444
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UIAlertController浅见
举报原因:
原因补充:

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