ImageVerifierCode 换一换
格式:DOC , 页数:20 ,大小:41.50KB ,
资源ID:12012814      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/12012814.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(在iOS-8中使用UIAlertController.doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

在iOS-8中使用UIAlertController.doc

1、 iOS 8的新特性之一就是让接口更有适应性、更灵活,因此许多视图控制器的实现方式发生了巨大的变化。全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备尺寸变化效果(比如说旋转)中发挥了重要的作用,它有效地节省了程序员们的工作量(天地良心啊)。还有,某些旧的UIKit控件也同样发生了许多变化,比如说Alert Views、Action Sheets、Popovers以及Search Bar Controllers。本文将会对Alert Views和Action Sheets发生的改变进行一个大致的介绍,我们会采用Objective-C和swift两

2、种语言同时进行代码说明。 UIAlertView 随着苹果上次iOS 5的发布,对话框视图样式出现在了我们面前,直到现在它都没有发生过很大的变化。下面的代码片段展示了如何初始化和显示一个带有“取消”和“好的”按钮的对话框视图。 Objective-C版本: UIAlertView*alertview=[[UIAlertViewalloc]initWithTitle:@”标题”message:@”这个是UIAlertView的默认样式”delegate:selfcancelButtonTitle:@”取消”otherButtonTitles:@”好的”,nil];[alertviewsh

3、ow];UIAlertView的默认样式 swift版本和Objective-C版本不同,在swift中,alertView的初始化只允许创建拥有一个取消按钮的对话框视图。或许您可以看到带有otherButtonTitles的init方法,但是很遗憾,这个方法是没有办法通过编译的。 varalertView=UIAlertView(title:”标题”,message:”这个是UIAlertView的默认样式”,delegate:self,cancelButtonTitle:”取消”)alertView.show()swift版本的UIAlertView 要能够创建和上面Objectiv

4、e-C版本相同的对话框视图,我们可以采取曲线救国的方法,虽然麻烦了些,但是我们为了目的可以不择手段的,是吧? varalertView=UIAlertView()alertView.delegate=selfalertView.title=“标题”alertView.message=“这个是UIAlertView的默认样式”alertView.addButtonWithTitle(“取消”)alertView.addButtonWithTitle(“好的”)alertView.show()您也可以通过更改UIAlertView的alertViewStyle属性来实现输入文字、密码甚至登录框的

5、效果。 UIAlertView文本对话框 UIAlertView密码对话框 UIAlertView登录对话框 UIAlertViewDelegate协议拥有响应对话框视图的按钮动作的回调方法。还有当文本框内容改变时,调用alertViewShouldEnableOtherButton:方法可以让按钮动态地可用或者不可用。 要说明一点,苹果官方现在并不提倡在iOS 8中使用UIAlertView,取而代之的是UIAlertController。下面我们就来介绍UIAlertController的使用方法。 UIAlertController 在iOS 8中,UIAlertContr

6、oller在功能上是和UIAlertView以及UIActionSheet相同的,UIAlertController以一种模块化替换的方式来代替这两货的功能和作用。是使用对话框(alert)还是使用上拉菜单(action sheet),就取决于在创建控制器时,您是如何设置首选样式的。 一个简单的对话框例子 您可以比较一下两种不同的创建对话框的代码,创建基础UIAlertController的代码和创建UIAlertView的代码非常相似: Objective-C版本: UIAlertController*alertController=[UIAlertControlleralertCo

7、ntrollerWithTitle:@”标题”message:@”这个是UIAlertController的默认样式”preferredStyle:UIAlertControllerStyleAlert];swift版本: varalertController=UIAlertController(title:”标题”,message:”这个是UIAlertController的默认样式”,preferredStyle:UIAlertControllerStyle.Alert)同创建UIAlertView相比,我们无需指定代理,也无需在初始化过程中指定按钮。不过要特别注意第三个参数,要确定您选

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

9、hTitle:@”取消”style:UIAlertActionStyleCancelhandler:nil];UIAlertAction*okAction=[UIAlertActionactionWithTitle:@”好的”style:UIAlertActionStyleDefaulthandler:nil];[alertControlleraddAction:cancelAction];[alertControlleraddAction:okAction];swift版本: varcancelAction=UIAlertAction(title:”取消”,style:UIAlertAct

10、ionStyle.Cancel,handler:nil)varokAction=UIAlertAction(title:”好的”,style:UIAlertActionStyle.Default,handler:nil)alertController.addAction(cancelAction)alertController.addAction(okAction)最后,我们只需显示这个对话框视图控制器即可: Objective-C版本: [selfpresentViewController:alertControlleranimated:YEScompletion:nil];swift版

11、本: self.presentViewController(alertController,animated:true,completion:nil)UIAlertController默认样式 按钮显示的次序取决于它们添加到对话框控制器上的次序。一般来说,根据苹果官方制定的《iOS 用户界面指南》,在拥有两个按钮的对话框中,您应当将取消按钮放在左边。要注意,取消按钮是唯一的,如果您添加了第二个取消按钮,那么你就会得到如下的一个运行时异常: * Terminating app due to uncaught exception ‘NSInternalInconsistencyExcepti

12、on’, reason: ‘UIAlertController can only have one action with a style of UIAlertActionStyleCancel’ 异常信息简洁明了,我们在此就不赘述了。 “警示”样式 什么是“警示”样式呢?我们先不着急回答这个问题,先来看一下下面关于“警示”样式的简单示例。在这个示例中,我们将前面的示例中的“好的”按钮替换为了“重置”按钮。 Objective-C版本: UIAlertAction*resetAction=[UIAlertActionactionWithTitle:@”重置”style:UIAlert

13、ActionStyleDestructivehandler:nil];[alertControlleraddAction:resetAction];swift版本: varresetAction=UIAlertAction(title:”重置”,style:UIAlertActionStyle.Destructive,handler:nil)alertController.addAction(resetAction)“警示”样式 可以看出,我们新增的那个“重置”按钮变成了红色。根据苹果官方的定义,“警示”样式的按钮是用在可能会改变或删除数据的操作上。因此用了红色的醒目标识来警示用户。 文

14、本对话框 UIAlertController极大的灵活性意味着您不必拘泥于内置样式。以前我们只能在默认视图、文本框视图、密码框视图、登录和密码输入框视图中选择,现在我们可以向对话框中添加任意数目的UITextField对象,并且可以使用所有的UITextField特性。当您向对话框控制器中添加文本框时,您需要指定一个用来配置文本框的代码块。 举个栗子吧,要重新建立原来的登录和密码样式对话框,我们可以向其中添加两个文本框,然后用合适的占位符来配置它们,最后将nHandler{(textField:UITextField!)->VoidintextField.placeholder=“登录”}

15、alertController.addTextFieldWithConfigurationHandler{(textField:UITextField!)->VoidintextField.placeholder=“密码”textField.secureTextEntry=true}在“好的”按钮按下时,我们让程序读取文本框中的值。 Objectect;...}];swift版本: varokAction=UIAlertAction(title:”好的”,style:UIAlertActionStyle.Default){(action:UIAlertAction!)->Voidinvar

16、login=alertController.textFields?.firstasUITextFieldvarpassword=alertController.textFields?.lastasUITextField}如果我们想要实现UIAlertView中的委托方法alertViewShouldEnableOtherButton:方法的话可能会有一些复杂。假定我们要让“登录”文本框中至少有3个字符才能激活“好的”按钮。很遗憾的是,在UIAlertController中并没有相应的委托方法,因此我们需要向“登录”文本框中添加一个Observer。Observer模式定义对象间的一对多的依赖关

17、系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。我们可以在构造代码块中添加如下的代码片段来实现:textField];}];swift版本: alertController.addTextFieldWithConfigurationHandler{(textField:UITextField!)->Voidin...NSNotificationCenter.defaultCenter().addObserver(self,selector:Selector(“alertTextFieldDidChange:”),name:UITextFieldTextDidCha

18、ngeNotification,object:textField)}当视图控制器释放的时候我们需要移除这个Observer,我们通过在每个按钮动作的handler代码块(还有其他任何可能释放视图控制器的地方)中添加合适的代码来实现它。比如说在okAction这个按钮动作中: Objective-C版本: UIAlertAction*okAction=[UIAlertActionactionWithTitle:@”好的”style:UIAlertActionStyleDefaulthanon!)->Voidin...NSNotificationCenter.defaultCenter().r

19、emoveObserver(self,name:UITextFieldTextDidChangeNotification,object:nil)}在显示对话框之前,我们要冻结“好的”按钮 Objective-C版本: okAction.enabled=NO;swift版本: okAction.enabled=false接下来,在通知观察者(notification observer)中,我们需要在激活按钮状态前检查“登录”文本框的内容。 Objective-C版本: -(void)alertTextFieldDidChange:(NSNotification*)notificatio

20、n{UIAlertController*alertController=(UIAlertController*)self.presentedViewController;if(alertController){UITextField*login=alertController.textFields.firstObject;UIAlertAction*okAction=alertController.actions.lastObject;okAction.enabled=login.text.length>2;}}swift版本: funcalertTextFieldDidChange(not

21、ification:NSNotification){varalertController=self.presentedViewControllerasUIAlertController?if(alertController!=nil){varlogin=alertController!.textFields?.firstasUITextFieldvarokAction=alertController!.actions.lastasUIAlertActionokAction.enabled=countElements(login.text)>2}}UIAlertController的登录和密码对

22、话框示例 好了,现在对话框的“好的”按钮被冻结了,除非在“登录”文本框中输入3个以上的字符: 上拉菜单 当需要给用户展示一系列选择的时候(选择恐惧症患者杀手),上拉菜单就能够派上大用场了。和对话框不同,上拉菜单的展示形式和设备大小有关。在iPhone上(紧缩宽度),上拉菜单从屏幕底部升起。在iPad上(常规宽度),上拉菜单以弹出框的形式展现。 创建上拉菜单的方式和创建对话框的方式非常类似,唯一的区别是它们的形式。 Objective-C版本: UIAlertController*alertController=[UIAlertControlleralertControllerWit

23、hTitle:@”保存或删除数据”message:@”删除数据将不可恢复”preferredStyle:UIAlertControllerStyleActionSheet];swift版本: varalertController=UIAlertController(title:”保存或删除数据”,message:”删除数据将不可恢复”,preferredStyle:UIAlertControllerStyle.ActionSheet)添加按钮动作的方式和对话框相同。 Objective-C版本: UIAlertAction*cancelAction=[UIAlertActionactio

24、nWithTitle:@”取消”style:UIAlertActionStyleCancelhandler:nil];UIAlertAction*deleteAction=[UIAlertActionactionWithTitle:@”删除”style:UIAlertActionStyleDestructivehandler:nil];UIAlertAction*archiveAction=[UIAlertActionactionWithTitle:@”保存”style:UIAlertActionStyleDefaulthandler:nil];[alertControlleraddActio

25、n:cancelAction];[alertControlleraddAction:deleteAction];[alertControlleraddAction:archiveAction];swift版本: varcancelAction=UIAlertAction(title:”取消”,style:UIAlertActionStyle.Cancel,handler:nil)vardeleteAction=UIAlertAction(title:”删除”,style:UIAlertActionStyle.Destructive,handler:nil)vararchiveAction=U

26、IAlertAction(title:”保存”,style:UIAlertActionStyle.Default,handler:nil)alertController.addAction(cancelAction)alertController.addAction(deleteAction)alertController.addAction(archiveAction)您不能在上拉菜单中添加文本框,如果您强行作死添加了文本框,那么就会荣幸地得到一个运行时异常: * Terminating app due to uncaught exception ‘NSInternalInconsiste

27、ncyException’, reason: ‘Text fields can only be added to an alert controller of style UIAlertControllerStyleAlert’ 同样,简单的异常说明,我们也不多说了。 接下来我们就可以在iPhone或者其他紧缩宽度的设备上展示了,不出我们所料,运行得很成功。 Objective-C版本: [selfpresentViewController:alertControlleranimated:YEScompletion:nil];swift版本: self.presentViewCont

28、roller(alertController,animated:true,completion:nil)iPhone上的上拉菜单效果 如果上拉菜单中有“取消”按钮的话,那么它永远都会出现在菜单的底部,不管添加的次序是如何(就是这么任性)。其他的按钮将会按照添加的次序从上往下依次显示。《iOS 用户界面指南》要求所有的“毁坏”样式按钮都必须排名第一(红榜嘛,很好理解的,对不对?)。 别激动得太早,我们现在还有一个很严重的问题,这个问题隐藏得比较深。当我们使用iPad或其他常规宽度的设备时,就会得到一个运行时异常: Terminating app due to uncaught except

29、ion ‘NSGenericException’, reason: ‘UIPopoverPresentationController () should have a non-nil sourceView or barButtonItem set before the presentation occurs.’ 就如我们之前所说,在常规宽度的设备上,上拉菜单是以弹出框的形式展现。弹出框必须要有一个能够作为源视图或者栏按钮项目的描点(anchor point)。由于在本例中我们是使用了常规的UIButton来触发上拉菜单的,因此我们就将其作为描点。 在iOS 8中我们不再需要小心翼翼地计算出

30、弹出框的大小,UIAlertController将会根据设备大小自适应弹出框的大小。并且在iPhone或者紧缩宽度的设备中它将会返回nil值。配置该弹出框的代码如下: Objective-C版本: UIPopoverPresentationController*popover=alertController.popoverPresentationController;if(popover){popover.sourceView=sender;popover.sourceRect=sender.bounds;popover.permittedArrowDirections=UIPopover

31、ArrowDirectionAny;}swift版本: varpopover=alertController.popoverPresentationControllerif(popover!=nil){popover?.sourceView=senderpopover?.sourceRect=sender.boundspopover?.permittedArrowDirections=UIPopoverArrowDirection.Any}iPad上的上拉菜单效果 UIPopoverPresentationController类同样也是在iOS 8中新出现的类,用来替换UIPopoverC

32、ontroller的。这个时候上拉菜单是以一个固定在源按钮上的弹出框的形式显示的。 要注意UIAlertController在使用弹出框的时候自动移除了取消按钮。用户通过点击弹出框的外围部分来实现取消操作,因此取消按钮便不再必需。 释放对话框控制器 通常情况下,当用户选中一个动作后对话框控制器将会自行释放。不过您仍然可以在需要的时候以编程方式释放它,就像释放其他视图控制器一样。您应当在应用程序转至后台运行时移除对话框或者上拉菜单。假定我们正在监听UIApplicationDidEnterBackgroundNotification通知消息,我们可以在observer中释放任何显示出来的视

33、图控制器。(参考在viewDidLoad方法中设立observer的示例代码)。 Objective-C版本: -(void)didEnterBackground:(NSNotification*)notification{[[NSNotificationCenterdefaultCenter]removeObserver:selfname:UITextFieldTextDidChangeNotificationobject:nil];[self.presentedViewControllerdismissViewControllerAnimated:NOcompletion:nil];}

34、swift版本: funcdidEnterackground(notification:NSNotification){NSNotificationCenter.defaultCenter().removeObserver(self,name:UITextFieldTextDidChangeNotification,object:nil)self.presentedViewController?.dismissViewControllerAnimated(false,completion:nil)}注意,要保证运行安全我们同样要确保移除所有的文本框observer。 我们来总结一下 这篇文章比较长,但是希望能够对您有所帮助。原先的UIAlertView和UIActionSheet类仍然可以在iOS 8中工作得很好,所以没有必要急于更换代码(要知道本文用到的许多函数尽在iOS 8中支持)。本文的代码可以在我的Github主页上找到,包括了AlertController - ObjC以及AlertController - swift。 ios消息推送

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服