您的位置:首页 > 产品设计 > UI/UE

UIAlUIAlertController详解与简单使用

2017-08-22 15:21 155 查看
苹果在 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 的大致使用方法就是这些了,希望对大家有帮助。文章比较长,主要是了解,自己实践比较好。

如有不对或不足的地方,大家尽情评论,但是不要带脏话~~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: