怎样在ios上加什么是api接口口的alertView,求完整带注释的代码

    发一个项目当中管理UIAlerView相当好用嘚模块。 可以无缝整合到当前项目中不需要其他依赖。

    这里封装了一个 UIAlerView 管理器 管理器是用队列实现的。 可以将自己的UIAlerView对象加入这个队列中可以随意插入到队列任何位置。

在从iOS8到iOS9的升级过程中弹出提示框的方式有了很大的改变,在Xcode7 iOS9.0的SDK中,已经明确提示不再推荐使用UIAlertView而只能使用UIAlertController,我们通过代码来演示一下

我通过点击一个按钮,然后彈出提示框代码示例如下:

 
 
 
 
 
 
编写上述代码时,会有下列的警告提示:


说明UIAlertView首先在iOS9中被弃用(不推荐)使用让我们去用UIAlertController。但是运行程序发现代码还是可以成功运行,不会出现crash

但是在实际的工程开发中,我们有这样一个“潜规则”:要把每一个警告(warning)当做错误(error)所以为了顺应苹果的潮流,我们来解决这个warning使用UIAlertController来解决这个问题。代码如下:
 
 
 
 
 
 //点击按钮的响应事件;
 
 
 
 
这样代码就不会有警告了。



发现這个提示框是从底部弹出的是不是很简单呢?通过查看代码还可以发现在提示框中的按钮响应不再需要delegate委托来实现了。直接使用addAction就可鉯在一个block中实现按钮点击非常方便。

iOS 8的新特性之一就是让接口更有适應性、更灵活因此许多视图控制器的实现方式发生了巨大的变化。全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备尺寸变化效果(比如说旋转)中发挥了重要的作用它有效地节省了程序员们的工作量(天地良心啊)。还有某些旧的UIKit控件也同样发生了许多变化,比如说Alert Views、Action

随着苹果上次iOS 5的发布对话框视图样式出现在了我们面前,直到现在它都没有发生过很大的变化下面的代码片段展示了如何初始化和显示一个带有“取消”和“好的”按钮的对话框视图。

swift版本和Objective-C版本不同在swift中,alertView的初始化只允许创建拥有一个取消按钮的对话框視图或许您可以看到带有otherButtonTitles的init方法,但是很遗憾这个方法是没有办法通过编译的。

要能够创建和上面Objective-C版本相同的对话框视图我们可以采取曲线救国的方法,虽然麻烦了些但是我们为了目的可以不择手段的,是吧

您也可以通过更改UIAlertView的alertViewStyle属性来实现输入文字、密码甚至登錄框的效果。

UIAlertViewDelegate协议拥有响应对话框视图的按钮动作的回调方法还有当文本框内容改变时,调用alertViewShouldEnableOtherButton:方法可以让按钮动态地可用或者不可用

您可以比较一下两种不同的创建对话框的代码,创建基础UIAlertController的代码和创建UIAlertView的代码非常相似:

同创建UIAlertView相比我们无需指定代理,也无需在初始囮过程中指定按钮不过要特别注意第三个参数,要确定您选择的是对话框样式还是上拉菜单样式

通过创建UIAlertAction的实例,您可以将动作按钮添加到控制器上UIAlertAction由标题字符串、样式以及当用户选中该动作时运行的代码块组成。通过UIAlertActionStyle您可以选择如下三种动作样式:常规(default)、取消(cancel)以忣警示(destruective)。为了实现原来我们在创建UIAlertView时创建的按钮效果我们只需创建这两个动作按钮并将它们添加到控制器上即可。

最后我们只需显示這个对话框视图控制器即可:

按钮显示的次序取决于它们添加到对话框控制器上的次序。一般来说根据苹果官方制定的《iOS 用户界面指南》,在拥有两个按钮的对话框中您应当将取消按钮放在左边。要注意取消按钮是唯一的,如果您添加了第二个取消按钮那么你就会嘚到如下的一个运行时异常:

异常信息简洁明了,我们在此就不赘述了

什么是“警示”样式呢?我们先不着急回答这个问题先来看一丅下面关于“警示”样式的简单示例。在这个示例中我们将前面的示例中的“好的”按钮替换为了“重置”按钮。

可以看出我们新增嘚那个“重置”按钮变成了红色。根据苹果官方的定义“警示”样式的按钮是用在可能会改变或删除数据的操作上。因此用了红色的醒目标识来警示用户

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

举个栗子吧,要重新建立原来的登录和密码样式对话框我们可以向其中添加两个文本框,然后用合適的占位符来配置它们最后将密码输入框设置使用安全文本输入。

在“好的”按钮按下时我们让程序读取文本框中的值。

如果我们想偠实现UIAlertView中的委托方法alertViewShouldEnableOtherButton:方法的话可能会有一些复杂假定我们要让“登录”文本框中至少有3个字符才能激活“好的”按钮。很遗憾的是在UIAlertControllerΦ并没有相应的委托方法,因此我们需要向“登录”文本框中添加一个ObserverObserver模式定义对象间的一对多的依赖关系,当一个对象的状态发生改变時, 所有依赖于它的对象都得到通知并被自动更新。我们可以在构造代码块中添加如下的代码片段来实现

当视图控制器释放的时候我们需偠移除这个Observer,我们通过在每个按钮动作的handler代码块(还有其他任何可能释放视图控制器的地方)中添加合适的代码来实现它比如说在okAction这个按钮动作中:

在显示对话框之前,我们要冻结“好的”按钮

接下来在通知观察者(notification observer)中,我们需要在激活按钮状态前检查“登录”文本框的内容

好了,现在对话框的“好的”按钮被冻结了除非在“登录”文本框中输入3个以上的字符:

当需要给用户展示一系列选择的时候(选择恐惧症患者杀手),上拉菜单就能够派上大用场了和对话框不同,上拉菜单的展示形式和设备大小有关在iPhone上(紧缩宽度),仩拉菜单从屏幕底部升起在iPad上(常规宽度),上拉菜单以弹出框的形式展现

创建上拉菜单的方式和创建对话框的方式非常类似,唯一嘚区别是它们的形式

添加按钮动作的方式和对话框相同。

您不能在上拉菜单中添加文本框如果您强行作死添加了文本框,那么就会荣圉地得到一个运行时异常:

同样简单的异常说明,我们也不多说了

接下来我们就可以在iPhone或者其他紧缩宽度的设备上展示了,不出我们所料运行得很成功。

iPhone上的上拉菜单效果

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

别激动得太早我们现在还有一个很严重的问题,这个问题隐藏得比较深当我们使用iPad或其他常規宽度的设备时,就会得到一个运行时异常:

就如我们之前所说在常规宽度的设备上,上拉菜单是以弹出框的形式展现弹出框必须要囿一个能够作为源视图或者栏按钮项目的描点(anchor point)。由于在本例中我们是使用了常规的UIButton来触发上拉菜单的因此我们就将其作为描点。

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

iPad上的上拉菜单效果

要注意UIAlertController在使用弹出框的时候自动移除了取消按钮。用户通过点击弹出框的外围部分来实现取消操莋因此取消按钮便不再必需。

通常情况下当用户选中一个动作后对话框控制器将会自行释放。不过您仍然可以在需要的时候以编程方式释放它就像释放其他视图控制器一样。您应当在应用程序转至后台运行时移除对话框或者上拉菜单假定我们正在监听UIApplicationDidEnterBackgroundNotification通知消息,我們可以在observer中释放任何显示出来的视图控制器(参考在viewDidLoad方法中设立observer的示例代码)。

注意要保证运行安全我们同样要确保移除所有的文本框observer。

我要回帖

更多关于 什么是api接口 的文章

 

随机推荐