文档章节

UIAlertView、UIActionSheet、UIAlertController使用

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 01:18
字数 929
阅读 1
收藏 0

(一)UIAlertView

1.默认样式

// UIAlertView iOS8开始 被废弃
- (void)defaultAlert
{
      // iOS8被废弃
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"测试" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"查看",@"评论", nil];
     // 因为是默认样式,所以这里可以不用写这句代码
    alert.alertViewStyle = UIAlertViewStyleDefault;

    [alert show];
}

// 需要遵守协议UIAlertViewDelegate来响应点击事件
#pragma mark - UIActionSheetDelegate
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSLog(@"%ld",buttonIndex);
}

defaultAlert.gif


其中,"查看"的buttonIndex == 1,"评论"的buttonIndex == 2,"取消"的buttonIndex == 0

2.带有明文输入框

- (void)plainText
{
    // iOS8被废弃
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"输入姓名" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    alert.alertViewStyle = UIAlertViewStylePlainTextInput;
    [alert show];
}

#pragma mark - UIActionSheetDelegate
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSLog(@"%ld",buttonIndex);
}

plainTextAlert.gif

3.带有密文输入框

- (void)secureText
{
    // iOS8被废弃
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"输入姓名" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    alert.alertViewStyle = UIAlertViewStyleSecureTextInput;
    [alert show];
}

#pragma mark - UIActionSheetDelegate
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSLog(@"%ld",buttonIndex);
}

secureTextAlert.gif

4.带有登录和密码输入框

- (void)loginAndPassword
{
    // iOS8被废弃
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"登录" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"登录",@"注册", nil];
    alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
    [alert show];
}

loginAndPwdTextAlert.gif

(二)UIActionSheet

- (void)actionSheet
{
    // iOS8被废弃
    UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"查看",@"评论", nil];
    [sheet showInView:self.view];
}

#pragma mark - UIActionSheetDelegate
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSLog(@"%ld",buttonIndex);
}

actionSheet.gif

(三)UIAlertController

UIAlertController从iOS8.0开始被使用。旨在替代UIAlertView和UIActionSheet这两个控件。
所以UIAlertController有一个preferredStyle属性属性,该属性是个UIAlertControllerStyle类型的枚举值,其值如下:

typedef NS_ENUM(NSInteger, UIAlertControllerStyle) {
    UIAlertControllerStyleActionSheet = 0,
    UIAlertControllerStyleAlert
} NS_ENUM_AVAILABLE_IOS(8_0);

不难发现,UIAlertControllerStyle的枚举值分别是UIAlertControllerStyleActionSheetUIAlertControllerStyleAlert,如果UIAlertController对象的preferredStyle属性取值为UIAlertControllerStyleActionSheet,那么其作用和效果就相当于iOS8中被废弃的UIActionSheet。
想反,如果UIAlertController对象的preferredStyle属性取值为UIAlertControllerStyleAlert,那么其作用和效果就相当于iOS8中被废弃的UIAlertView。
我们知道,使用UIAlertView和UIActionSheet需要遵守对应的协议并实现相应的方法,因为UIAlertView和UIActionSheet采用delegate的方式处理事件。而UIAlertController则采用灵活的block方式处理事件。所以使用UIAlertController不用再遵守某个协议,只需将响应事件的代码写在block中即可。这一点,让我们想起了NSURLConnection和NSURLsession。

1.UIAlertControllerStyleActionSheet样式

- (void)actionSheet {

    UIAlertController *actionSheetController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];

    UIAlertAction *showAllInfoAction = [UIAlertAction actionWithTitle:@"查看" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

    }];
    UIAlertAction *pickAction = [UIAlertAction actionWithTitle:@"评论" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

    }];
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

    }];

    [actionSheetController addAction:cancelAction];
    [actionSheetController addAction:commentAction];
    [actionSheetController addAction:showAllInfoAction];

    [self presentViewController:actionSheetController animated:YES completion:nil];
}

actionSheetStyle.gif

2.UIAlertControllerStyleAlert样式

2.1.默认样式

    UIAlertController *actionSheetController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction *showAllInfoAction = [UIAlertAction actionWithTitle:@"查看" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

    }];
    UIAlertAction *commentAction = [UIAlertAction actionWithTitle:@"评论" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

    }];
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

    }];

    [actionSheetController addAction:cancelAction];
    [actionSheetController addAction:commentAction];
    [actionSheetController addAction:showAllInfoAction];

    [self presentViewController:actionSheetController animated:YES completion:nil];

alertStyle.gif

文本框样式

- (void)alertStyleWithTextField
{
    UIAlertController *actionSheetController = [UIAlertController alertControllerWithTitle:nil message:@"输入姓名" preferredStyle:UIAlertControllerStyleAlert];
    [actionSheetController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder = @"请输入姓名";
    }];

    UIAlertAction *determineAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

    }];

    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

    }];

    [actionSheetController addAction:determineAction];
    [actionSheetController addAction:cancelAction];

    [self presentViewController:actionSheetController animated:YES completion:nil];
}

alertTextFieldStyle.gif

2.3.登录模式

- (void)alertStyleWithTwoTextField
{
    UIAlertController *actionSheetController = [UIAlertController alertControllerWithTitle:nil message:@"登录" preferredStyle:UIAlertControllerStyleAlert];
    [actionSheetController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder = @"账号";
    }];
    [actionSheetController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder = @"密码";
        textField.secureTextEntry = YES;
    }];

    UIAlertAction *determineAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

    }];

    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

    }];

    [actionSheetController addAction:determineAction];
    [actionSheetController addAction:cancelAction];

    [self presentViewController:actionSheetController animated:YES completion:nil];
}

alertTwoTextFieldStyle.gif

demo地址: https://github.com/nlgb/AlertAndActionSheetDemo

文/VV木公子(简书作者)
PS:如非特别说明,所有文章均为原创作品,著作权归作者所有,转载转载请联系作者获得授权,并注明出处,所有打赏均归本人所有!

如果您是iOS开发者,或者对本篇文章感兴趣,请关注本人,后续会更新更多相关文章!敬请期待!

本文转载自:http://www.jianshu.com/p/85edffe95d2a

共有 人打赏支持
AllenOR灵感
粉丝 10
博文 2634
码字总数 82983
作品 0
程序员
IOS基础UI之(五)UIAlertView、UIActionSheet和UIAlertContro

IOS基础UI之(五)UIAlertView、UIActionSheet和UIAlertController详解 标签: iosUIAlertViewUIActionSheetUIAlertController 2015-09-20 11:58 340人阅读 评论(3) 收藏 举报 分类: IOS(UI基......

Bob_Zheng
2015/11/26
41
0
[Swift]UIKit学习之警告框:UIAlertController和UIAlertView

Important: UIAlertView is deprecated in iOS 8. (Note that UIAlertViewDelegate is also deprecated.) To create and manage alerts in iOS 8 and later, instead use UIAlertController ......

王永濤
2015/10/21
630
0
UIAlertController的用法

1.我为什么要写这篇博客记录它? 答:因为 UIAlertView和UIActionSheet 被划线了 苹果不推荐我们使用这两个类了,也不再进行维护和更新,为了方便以后使用我来记录一下。如图所示正如苹果所说...

chen_gp_x
2017/03/19
0
0
iOS8统一的系统提示控件——UIAlertController

iOS8统一的系统提示控件——UIAlertController 一、引言 相信在iOS开发中,大家对UIAlertView和UIActionSheet一定不陌生,这两个控件在UI设计中发挥了很大的作用。然而如果你用过,你会发现这...

珲少
2015/10/17
5.4K
2
UIAlertController 简单使用

简介:UIAlertController 取代了 UIAlertView 和 UIActionSheet 使用: 声明: 添加项目: 展示: 含对话框的 设置颜色

程序猿-樱木花道
2016/06/29
35
0

没有更多内容

加载失败,请刷新页面

加载更多

白话SpringCloud | 第十章:路由网关(Zuul)进阶:过滤器、异常处理

前言 简单介绍了关于Zuul的一些简单使用以及一些路由规则的简单说明。而对于一个统一网关而言,需要处理各种各类的请求,对不同的url进行拦截,或者对调用服务的异常进行二次处理等等。今天,...

oKong
14分钟前
1
0
详解nohup和& 区别

详解nohup和& 区别 2017年11月29日 16:57:38 King-Long 阅读数:7266 版权声明:本文为博主原创文章,欢迎转载。 https://blog.csdn.net/u011095110/article/details/78666833 nohup 一、【解...

linjin200
26分钟前
2
0
Character的static方法

基本类型char的包装类是Character,使用的比较多,大家是比较熟悉的。 我只是觉得里面有很多static方法,平时不怎么用,学习一下怎么实现的,或许日后就用到了。 static int compare(char x,...

woshixin
27分钟前
1
0
正则介绍_sed

10月17日任务 9.4/9.5 sed sed工具 匹配打印 -n 只打印匹配行,不然其他行也会打印出来 p 打印(配合-n使用) [root@centos7 tmp]# sed -n '/root/'p passwd root:x:0:0:root:/root:/bin/ba...

robertt15
27分钟前
2
0
轻松解码类似eval(function(p,a,c,k,e,d){}))的JavaScript代码

轻松解码类似eval(function(p,a,c,k,e,d){}))的JavaScript代码 2013年05月22日 15:18:05 秋实先生 阅读数:14826 这里解码百度访问统计代码构造函数为示例: 百度访问统计代码JavaScript源码:...

_纵横捭阖_
36分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部