博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)
阅读量:4517 次
发布时间:2019-06-08

本文共 6845 字,大约阅读时间需要 22 分钟。

iOS8推出了几个新的“controller”,主要是把类似之前的UIAlertView变成了UIAlertController,这不经意的改变,貌似把我之前理解的“controller”一下子推翻了~但是也无所谓,有新东西不怕,学会使用了就行。接下来会探讨一下这些个新的Controller。

 

- (void)showOkayCancelAlert {    NSString *title = NSLocalizedString(@"A Short Title Is Best", nil);    NSString *message = NSLocalizedString(@"A message should be a short, complete sentence.", nil);    NSString *cancelButtonTitle = NSLocalizedString(@"Cancel", nil);    NSString *otherButtonTitle = NSLocalizedString(@"OK", nil);    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];        // Create the actions.    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {        NSLog(@"The \"Okay/Cancel\" alert's cancel action occured.");    }];        UIAlertAction *otherAction = [UIAlertAction actionWithTitle:otherButtonTitle style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {        NSLog(@"The \"Okay/Cancel\" alert's other action occured.");    }];        // Add the actions.    [alertController addAction:cancelAction];    [alertController addAction:otherAction];        [self presentViewController:alertController animated:YES completion:nil];}

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

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

上面的界面如下:

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

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

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

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

而改变背景色会这样:

完整的密码输入:

- (void)showSecureTextEntryAlert {    NSString *title = NSLocalizedString(@"A Short Title Is Best", nil);    NSString *message = NSLocalizedString(@"A message should be a short, complete sentence.", nil);    NSString *cancelButtonTitle = NSLocalizedString(@"Cancel", nil);    NSString *otherButtonTitle = NSLocalizedString(@"OK", nil);    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];        // Add the text field for the secure text entry.    [alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {        // Listen for changes to the text field's text so that we can toggle the current        // action's enabled property based on whether the user has entered a sufficiently        // secure entry.        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleTextFieldTextDidChangeNotification:) name:UITextFieldTextDidChangeNotification object:textField];        textField.secureTextEntry = YES;    }];    // Create the actions.    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {        NSLog(@"The \"Secure Text Entry\" alert's cancel action occured.");        // Stop listening for text changed notifications.        [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:alertController.textFields.firstObject];    }];    UIAlertAction *otherAction = [UIAlertAction actionWithTitle:otherButtonTitle style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {        NSLog(@"The \"Secure Text Entry\" alert's other action occured.");        // Stop listening for text changed notifications.        [[NSNotificationCenter defaultCenter] 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 the enabled/disabled state when the text changed.    self.secureTextAlertAction = otherAction;    // Add the actions.    [alertController addAction:cancelAction];    [alertController addAction:otherAction];        [self presentViewController:alertController animated:YES completion:nil];}

注意四点:

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

// Add the text field for the secure text entry.    [alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {        // Listen for changes to the text field's text so that we can toggle the current        // action's enabled property based on whether the user has entered a sufficiently        // secure entry.        [[NSNotificationCenter defaultCenter] addObserver:self selector:@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 for secure text alerts.    self.secureTextAlertAction.enabled = textField.text.length >= 5;}

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

UIAlertAction *otherAction = [UIAlertAction actionWithTitle:otherButtonTitle style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {        NSLog(@"The \"Secure Text Entry\" alert's other action occured.");        // Stop listening for text changed notifications.        [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:alertController.textFields.firstObject];    }];

 

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

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

在底部显示如下:

 

转载于:https://www.cnblogs.com/maple023/p/4024650.html

你可能感兴趣的文章
关于离职证明和竞业条款
查看>>
库存管理系统
查看>>
BZOJ 2809 APIO 2012 dispatching 平衡树启示式合并
查看>>
mavan和idea的搭建,很好的一篇文章
查看>>
springboot访问项目中某个module的图片(服务器拿不到)
查看>>
[P1329] 数列
查看>>
Research on How Tradeshow Magician Works
查看>>
LINUX 配置网络
查看>>
一个不错的git资源站点
查看>>
收缩数据库
查看>>
01_8_session
查看>>
HDU 2054 A==B? 大数
查看>>
在GNU Linux中怎样得到一个进程当前的流量
查看>>
openwrt的CBI控件简单说明
查看>>
Objective-C Category
查看>>
关于app目录的一些整理
查看>>
人什么时候才能长大
查看>>
一步步学敏捷开发:开篇
查看>>
Notepad++中常用的插件
查看>>
分布式缓存系统 Memcached 整体架构
查看>>