UIAlUIAlertController详解与简单使用

苹果在 iOS 8.0之后,苹果弃用了UIAlertView 和 UIActionSheet,我们在苹果有关UIAlertView的官方文档中可以看到有关的描述与说明,如图1



图1

注:UIAlertView在iOS 8中已被弃用。(请注意,UIAlertViewDelegate也已被弃用。)要在iOS 8及更高版本中创建和管理警报,请改用UIAlertController与优先级的UIAlertControllerStyleAlertStyle

官方文档中明确说明UIAlertView在iOS 8中已被弃用,(注意:文档中说有关UIAlertView的相关代理的方法也弃用的,UIActionSheet同样)建议我们改用UIAlertController与优先级的UIAlertControllerStyleAlertStyle

虽说被弃用的,但是我们还是可以继续使用的,会报警告,但是苹果不过对其进行更新和维护了。选择上,看个人习惯,但是我觉得既然苹果弃用了UIAlertView UIActionSheet,还是应该有原因的,原因我们肯定不知道,但是既然弃用了,以后可能会不允许继续使用的,那么我们不如就趁早用起来苹果官方推荐的UIAlertController。接下来我们看下代码实例(PS:大家想要了解一个东西时,官方文档应该是你的第一选择):

首先我们看一下官方文档中对UIAlertController的描述,


图2

文档中说,我们可以用UIAlertController来替换掉显示警告的那些UIAlertView,因为UIAlertController也是控制器,所以我们想要它显示的时候,我们调用presentViewController这个方法即可显示。UIAlertController 是通过添加Action将操作和警报控制器相关联的,addActio:添加相关操作。


下面我们看下如何声明以及如何添加一些事件。

1.   我们通过类方法去创建一个提示控制器,我们需要注意的是,声明的时候有一个preferredStyle 的属性,文档中表示我们可以根据这个属性的选择来确定我们要显示UIAlertView 还是 UIActionSheet,这个属性是个枚举值,我们看一下,如图:


图3

我们先创建一个ALert 的,并将它显示出来


图4

我们看一下显示效果

图5

我们不为提示控制器添加Action 的话,是没有按钮的。

下面我们为提示控制器添加一些取消确认的事件,如图:


图6


我们看下显示效果:

图7


我们需要注意一个属性,style,这个属性也是枚举值,里面包含确认,取消,和警告注意:取消按钮是唯一的,如果你添加了第二个取消按钮,那么程序会报异常

*Terminating app due to uncaught exception ‘NSInternalInconsistencyException’,reason: ‘UIAlertController can only have one action with a style ofUIAlertActionStyleCancel’
很明显的错误提示信息。

UIAlertController具有极大的灵活性,以前我们只能在默认视图、文本框视图、密码框视图、登录和密码输入框视图中选择,现在我们可以向对话框中添加任意数目的UITextField对象,并且可以使用所有的UITextField特性。当您向对话框控制器中添加文本框时,您需要指定一个用来配置文本框的代码块。


图8


这样就将登陆和密码的输入框加上了,如图:

图9


基本加载就是这样了。我们不能光展示而不去用,下面我们来在“好的”按钮按下时,读取文本框的值


图10

我们把“好的”Action改一下,我们看到有个textFields属性,

注意:textFields actions 属性,都是只读属性,无法进行更改。

如果我们需要对Alert上的按钮做一些限制的话,我们需要在Action的block方法里添加Observe,如下图,我们添加Observe,然后实现方法,当视图控制器释放的时候我们需要移除这个Observer,我们通过在每个按钮动作的handler代码块(还有其他任何可能释放视图控制器的地方)中添加合适的代码来实现它。比如说在okAction这个按钮动作中,非常简单的操作,大家直接看看代码吧


//在输入框中添加 输入框改变就调用的事件


图11

//然后调用并实现它


图12

//然后在“好的”里我们需要移除它


图13


Sheet的方法和Alert基本一致,只不过创建时我们把属性改为Sheet就可以了,但是我们要注意几点就是,

一、    Sheet是不允许添加输入框的,如果你强行加的话,会报异常。

二、    如果上拉菜单中有“取消”按钮的话,那么它永远都会出现在菜单的底部,不管添加的次序是如何(就是这么任性)。其他的按钮将会按照添加的次序从上往下依次显示。《iOS 用户界面指南》要求所有的“警告”样式按钮都必须排名第一。

三、   在iOS 8中我们不再需要小心翼翼地计算出弹出框的大小,    UIAlertController将会根据设备大小自适应弹出框的大小。并且在iPhone或者紧缩宽度的设备中它将会返回nil值。配置该弹出框的代码如下:

UIPopoverPresentationController *popover =alertController.popoverPresentationController;

    if (popover){

        popover.sourceView =sender;

        popover.sourceRect =sender.bounds;

        popover.permittedArrowDirections = UIPopoverArrowDirectionAny;

    }

UIAlertController 的大致使用方法就是这些了,希望对大家有帮助。文章比较长,主要是了解,自己实践比较好。

如有不对或不足的地方,大家尽情评论,但是不要带脏话~~~~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值