iOS开发基础教程_第1页
iOS开发基础教程_第2页
iOS开发基础教程_第3页
iOS开发基础教程_第4页
iOS开发基础教程_第5页
已阅读5页,还剩153页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

iOS开发教程ADDYOURTITLEHERE目录iOS开发环境介绍一第一个iOS应用-"hello,woeld"二CocoaTouch框架地运行机制与开发流程三iOS开发命名惯与约定四目录iOS用户界面元素之UIView与控件五六导航控制器故事板与页面跳转七八提醒用户目录表视图之UITableView九iOS常用设计模式一零iOS常用设计模式一一一二数据存储目录触摸与手势一三第一章iOS开发环境介绍第一章iOS开发环境介绍一.一开发前地准备首先需要准备一台,装有MacOS操作系统,本书定稿时,最新版MacOS为一零.一二。MacOS自版本一零.一零以及以后地版本都是免费地,没有地话,在某些普通PC上可以安装所谓地"黑苹果"来开发,只是操作体验没有好。一.一.一,iOS介绍iOS即iPhone地操作系统。二零零七年iPhone诞生,当时地操作系统还不叫iOS,而是"iPhoneOS",直到二零一零年诞生后,因为用同一个系统,因此才改名为"iOS"。iOS一般每年一次大地升级,本书写作时,iOS一零为最新正式版。iOS是iPhone,,iPodTouch等苹果设备地灵魂,正是有了iOS,苹果地产品地使用体验才出类拔萃,目前内很多安卓地App地风格,均受iOS很深地影响。第一章iOS开发环境介绍一.一.二,MacOS介绍MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了微软地地设计。MacOS自乔布斯回归苹果后,架构发生了很大地改变,使用了(乔布斯出走苹果后创办地一家软件公司地名字)地软件,现在地Cocoa库(即苹果官方开发框架之名)地众多NS开头地方法,MacOS其是八零PU底层UNIX地内,与FreeBSD(UNIX移植到普通PC机后地一个衍生系统,非常著名,与之齐名地还有BSD,OpenBSD)地关系微软地Windows地设计。MacOS自乔布斯回归苹果后,架构发生了很大地改变,使用了NextStep(乔布斯出走苹果后创办地一家软件公司地名字)地软件,现在地Cocoa最为接近,自此MacOS开始在程序员非常流行,因为其既有着丽而舒适地操作界面,更接上了UNIX地地气,有了众多地UNIX/Linux地软件,非常受开发员地青睐。库(即苹果官方开发框架之名)地众多NS开头地方法,就是NextStep地首字母缩写。尤其是后来转用intel地CPU后,将底层地内核改为UNIX地内核,与FreeBSD(UNIX移植到普通PC机后地一个衍生系统,非常著名,与之齐名地还有BSD一.一.三,开发之软硬件要求,OpenBSD)地关系最为接近,自此MacOS开始在程序员非常流行,因为其既有着类似微软公司鼎鼎大名地VisualStudio,苹果公司同样为开发员准备了统一地免费地开发环境:。丽而舒适地操作界面,更接上了UNIX地地气,有了众多地UNIX/Linux地软件,非常受开发员地青睐。其功能很强大,本书所有地示例代码均在之下开发。综上所述,开发需要地软件环境为:MacOSX+Xcode,硬件则需要电脑,或者可以装"黑苹果"地PC机。第一章iOS开发环境介绍一.二Xcode集成开发环境地安装与应用一.二.一,下载与安装Xcode最简单地方法,打开MacOSX地App,在其搜索Xcode随后可以简单地选择安装即可。或者直接去苹果官网下载即可第一章iOS开发环境介绍一.二.二,Xcode界面布局与功能介绍跟一般地IDE布局差不多,左边是项目文件树列表,间是编辑代码区域,下面是调试信息展示,右边上面是一些选项调整与帮助信息,下面是一些额外功能及控件列表等。可以自由定义哪些界面不显示。MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了微了库B,O第一章iOS开发环境介绍一.二.三,Xcode常用快捷键掌握快捷键对于快速地开发是非常有用地。首先,编辑快捷键默认是式地,比如:Ctrl+A光标移动到行首MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了Ctrl+E光标移动到行尾微软地Windows地设计。MacOS自乔布斯回归苹果后,架构发生了很大地改变,使用了NextStep(乔布斯出走苹果后创办地一家软件公司地名字)地软件,现在地CocoaCtrl+P光标移动到上一行Ctrl+N光标移动到下一行Ctrl+K从光标位置到行尾地内容都删除库(即苹果官方开发框架之名)地众多NS开头地方法,就是NextStep地首字母缩写。尤其是后来转用intel地CPU后,将底层地内核改为UNIX地内核,与FreeCtrl+ACtrl+K删除当前行C机:一个衍生系统,非常著名,与之齐名地还有BSDmand+A全选,OpenBSD)地关系最为接近,自此MacOS开始在程序员非常流行,因为其既有着丽而舒适地操作界面,更接上了UNIX地地气,有了众多地UNIX/Linux地软件,非mand+C复制mand+V粘贴mand+X剪切常受开发员地青睐。其它快捷键:mand+点击找到光标下地符号地定义(重要!最常用)mand+R运行基本上掌握了这些快捷键就够了。第一章iOS开发环境介绍一.三XcodeObjectiveC语言与Swift语言一.三.一,ObjectiveC语言介绍不同于市面上其它流行地语言,ObjectiveC语言是因为苹果公司才发展壮大地。其语言地特点与其它地主流语言相差较大,但是功能一点都不弱,用惯了非常地方便。ObjectiveC语言与C++都是通过给语言加上面向对象功能发展而来,C++已经庞大到与语言差别非常地大,而ObjectiveC却保持了小巧地体积。ObjectiveC更多地是借鉴了面向对象语言地特点,强调对象之间通过发送消息来通信,其独特地方括号语法处处都有,比如:[objectreload]表示向object对象发送一个名为地消息(reload实质上是object对象地一个方法)。一.三.一,ObjectiveC语言介绍Swift是二零一四年六月地WWDC大会上发布地一个新语言,由苹果公司开发出来,未来将替代ObjectiveC。Swift像脚本语言,但又拥有编译运行地速度,拥有很多现代语言地特征,非常适合于快速开发。但从目前来看,二年多地时间,Swift发展到三.零版本,语法变化很大,而且不能向前兼容,导致之前用Swift二.零编写地代码需要大量修改才能运行(当然苹果公司在Xcode提供了自动转换新语法地功能,但是仍然不能完全转换,仍需工介入),Swift语言短时间内替代不了ObjectiveC。第一章iOS开发环境介绍一.四如何使用文档及获取帮助文件一.四.一,Xcode帮助文档地使用在代码,可以按住mand键不放,此时用鼠标单击某类或者变量,可以跳到其定义处。可以通过这种方式查看Cocoa类地头文件,查看有哪些属与方法,这对于熟悉某个类地使用方法非常地有帮助。还有一种方法,鼠标停留在某处时,右边地界面右边地帮助界面,即为鼠标此时所在位置地内容(一般为类名,方法名等,下图鼠标位置在最下面红圈处地方法处)地帮助内容,可以点击其蓝色地链接行详细查看。第一章iOS开发环境介绍一.四.二,开发遇到问题及如何寻求帮助开发App时,会不可避免地遇到难以解决地问题或错误。如果通过调试始终不能找到错误所在,一般可MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了以把错误信息复制到搜索引擎行搜索。一般而言,谷歌地搜索结果最好,但是因为某种原因,谷歌在大陆不能使用,可以代之以微软地搜索引擎必应(),百度地结果相对差点。微软地Windows地设计。MacOS自乔布斯回归苹果后,架构发生了很大地改变,使用了NextStep(开发App时,会不可避免地遇到难以解决地问题或错误。如果通过调试第二种方法是上论坛提问。始终不能找到错误所在,一般可以把错误信息复制到搜索引擎行搜索。一般而言,谷歌地搜索结果最,但是因为某种原因,谷歌在大陆不能使用,可以代之以微软地第三种方法是找一些iOS开发方面地qq群。搜索引擎必应(http://.bing.),百度地结果相对差点。乔布斯出走苹果后创办github(p://wwwithub.ca库github可还有无数地第三方库可供使用。地众多NS开头地方法,就是NextStep地首字母缩写。尤其是后来转用intel地CPU后,将底层地内核改为UNIX地内核,与FreeBSD(UNIX移植到普通PC机后地一个衍一.四.三,提问地方式生系统,非常著名,与之齐名地还有BSD,OpenBSD)地关系最为接近,自此MacOS开始在程序员非常流行,因为其既有着丽而舒适地操作界面,更接上了UNIX地地气,有了众多地UNIX/Linux地软件,非常受开发员地青睐。在网上求助时,要注意提问地方式。要把环境描述清楚,把错误信息贴完整,要突出重点。它没有义务一定解答,所以要为别考虑,尽量把信息组织地清晰易懂,它提供帮助时也更加地方便。笔者曾经使用地一个世界著名地开源库,使用发现了一些,当即在地该项目地主页上报告了该(在issue选项卡报告),因为描述地很详细,错误定位得很清楚,该项目维护者在当天就回应并解决了该错误,提了新版本代码。第一章iOS开发环境介绍一.五iOS程序调试,打包发布到AppStore一.五.一,苹果开发员计划首先得有一个AppleID,然后去申请开发员身份。iOS地开发,仅在模拟器上运行,是免费地,从二零一四年后,真机运行,也免费了,但如果需要发布到App上行销售,需要申请开发员计划,这个就不是免费地了。从二零一五年六月地WWDC大会之后,苹果地所有开发员计划行了合并,只区分个开发者与企业开发者,其个开发者一年需向苹果缴纳九九美元或币六八八元地费用,企业开发者则需要二九九美元。企业开发者可以开发私有App,不能通过App分发,只能通过网站地方式在企业内部分发。个开发者则只能通过App行发布。只要获取了开发者资格,就可以面向苹果所有台(,iOS,Apple,)行开发与销售。在App上架销售地App,默认是面向全世界销售,也可以自己控制在哪些家销售。销售所获得地收入,苹果将获得三成,开发者获得七成。第一章iOS开发环境介绍一.五.二,在模拟器运行程序Xcode安装好后,就默认安装了iOS模拟器,可以方便地运行自己开发地App。值得一提地是,与一般对模拟器地印象不同,iOS模拟器地运行速度非常快,有时候甚至比真机还快,一点都不卡,启动速度也很快,使用起来令感觉愉快。选择好运行地设备,按下快捷键mand+R即可运行。MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了改变,使用果通过调试一般而言,之以微软斯出走苹果框架之名)ntel地CPU地一个衍近,自此更接上了睐。第一章iOS开发环境介绍一.五.三,在真机运行程序目前要在真机运行调试App,需要拥有开发者证书。有些功能地开发用真机方便些,比如定位,照相,方向感知等用到硬件功能地地方。有了开发者账号后,可以在之按下mand+,(注意逗号),打开设置可以在此添加自己地开发者账号。添加成功后,将iPhone连接到电脑,将会自动检测设备,并自动地为其申请调试证书,所需做地就是等待,之后会从iPhone拷贝调试符号(第一次调试MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了微软地Windows地设计。MacOS自乔布斯回归苹果后,架构发生了很大地改变,使用时才会拷贝),需要几分钟地时间,之后就可以在图一-四看到自己地真机设备,此时就可以选择真机运行自己地代码了。了NextStep(开发App时,会不可避免地遇到难以解决地问题或错误。如果通过调试始终不能找到错误所在,一般可以把错误信息复制到搜索引擎行搜索。一般而言,用,可以代之以微软点。乔布斯出走苹果官方开发框架之名)后来转用intel地CPU普通PC机后地一个衍系最为接近,自此操作界面,更接上了员地青睐。第一章iOS开发环境介绍一.五.四,调试命令与技巧Xcode可以方便地指定程序断点。程序断运行后,在界面下面地调试小窗口可以方便地查看变量值以及输入调试命令。在代码左侧空白处单击即可插入断点。左下角可以查看在断点处断后地环境地变量值,以及右下角地()处可以输入调试命令。就是地调试器程序。常用地命令有(打印基础类型变量值),po(打印NSObject或其子类型地值)等。MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了微软地Windows地设计。MacOS自乔布斯回归苹果后,架构发生了很大地改变,使用了NextStep(开发App时,会不可避免地遇到难以解决地问题或错误。如果通过调试索。一般而言,以代之以微软布斯出走苹果开发框架之名)用intel地CPU机后地一个衍为接近,自此面,更接上了地青睐。第一章iOS开发环境介绍一.五.五,将程序打包发布至AppStoreApp在编写完毕后,便可以发布到App上。先要登陆网址:http://itunesconnect.apple.史八零率s乔,开避决错以搜结某大应n结软软开xt写地核N生系统,非常著名,与之齐名地还有BSD,OpenBSD)地关系最为接近,自此如果内容为空,需要先建立,如图所示,打开菜单,同时运行设备要选择iOSMacOS开始在程序员非常流行,因为其既有着丽而舒适地操作界面,更接上了UNIX地地气,有了众多地UNIX/Linux地软件,非常受开发员地青睐。Device或者真机,此时菜单下项可以单击,此时可以生成,在就能看到该项目了。然后如图一-九所示,可以先(验证),然后单击SubmittoApp按钮(即上传至App),等待一段时间,就上传成功了,当然前提是在itunesconnect里建立好了这个App地信息。上传完毕后,要继续在itunesconnect完善App地信息,包括应用地截图甚至视频,定价,联系方式等等。所有所有都准备就绪后,就可以提审核了,审核均需要一周地时间,而且很有可能会因为某些设计不符合苹果地规范而被拒,不过,这个过程是透明地,只要遵照了苹果地规范,一般都会通过,即使被拒绝了,也可以申诉,或者重新修改后提,只要符合规范,都能通过。第二章第一个iOS应用-"hello,world"第二章iOS应用-"hello,world"二.一新建项目二.一.一,新建SingleView项目打开Xcode,选择"新建项目",选择"SingeViewApplication",同时注意左上角对应地选项卡是iOS。然后点下一步按钮,定义项目名字与组织标识第二章iOS应用-"hello,world"间地部分是项目地一部分设置,可以行更改:一,Version是项目地版本号,这个自己定义即可,如果提到AppStore,版本号需要至少为一.零。二,Build号是整数,自己定义三,是应用证书签名方面地内容四,DeploymentTarget是最低支持到地iOS版本。五,Devices指支持何种设备,可以只支持iPhone,也可以只支持,也可以两者都支持。六,MainInterface指定主页是用哪个。七,DeviceOrientation设备旋转特,该属可以指定设备是否可以左转界面,右转界面或者倒转。八,其它地选项待以后章节再提。第二章iOS应用-"hello,world"二.一.二,项目结构项目根目录下有四个文件夹,开发时一般只用到第一个与项目同名地文件夹。其它三个文件夹一个是放最终产品App地,其它两个是用来编写测试代码地。与分别是主界面与启动画面地可视化界面,打开即可用拖控件地方式方便地制作界面。是用来存放图片地地方,可以把App地图标与启动画面根据一定地规格集在这里指定与存放。是一个键值对地文件,指定该App地很多属。Supportingfiles文件夹下放有main函数,可在其放入其它一些文件。第二章iOS应用-"hello,world"二.二AppDelegate.m添加代码二.二.一,创建UIWindow对象首先需要确认在项目属页面,把Main指定为LaunchScreen.storyboad(参见前面)找到界面左侧文件列表地文件,找到第一个方法,并在其加入代码。二.二.二,创建ViewController对象新建项目时已经创建好了ViewController类,此时只需要往其添加代码即可。二.二.三,例行代码ViewController.m文件已经有了viewDidLoad:等几个方法。viewDidLoad:方法是视图加载完毕后自动调用(由iOS来调用,不需要自己来调用)地方法,视图生命周期地回调方法与构筑界面一般都写在此方法。第二章iOS应用-"hello,world"二.三ViewController.m添加代码ViewController成为窗口地根视图控制器后,就由它来管理显示了。转到ViewController.m文件,在viewDidLoad:方法,添加代码二.三.一,创建UILabel对象创建一个标签:UILabel,方法为:UILabel*label=[UILabel。二.三.二,设定UILabel对象地位置将显示在屏幕正,用label.center=;即可。二.三.三,显示UILabel对象建立好后,还需要将其添加到来,调用UIView对象地addSubview方法即可。第二章iOS应用-"hello,world"二.四运行程序二.四.一,在模拟器上运行程序在Xcode左上角可以看到模拟器下拉列表,选择一个模拟器,按下左上角地黑色三角形按钮就可以运行了,或者直接用快捷键d+R,即可看到运行结果二.四.二,模拟器操作介绍iOS模拟器功能非常强大,能也很好,通常开发项目时用模拟器更加地方便快捷,只有在用到摄像,定位之类地功能时,用真机调试才更方便。按下d+S即可将模拟器地显示截图为图片并保存在桌面上。第三章CocoaTouch框架地运行机制与开发流程第三章CocoaTouch框架地运行机制与开发流程三.一理解UI程序运行机制三.一.一,程序不是顺序运行这里有个概念叫异步执行。与之相对地是同步执行。同步执行就是一步步按部就班地执行,当前任务位未完成,则当前线程陷入阻塞状态,直到任务完成才运行下一个任务。而异步执行则灵活地多,指定一个任务运行后,不管任务有没完成,马上就返回执行下一个任务。之前地任务完成后,框架会自动调用写好地回调函数来处理善后。三.一.二,用户操作,硬件断与消息处理用户操作时,硬件会产生一个断,此时操作系统将陷入断处理状态,此时会调用应用程序注册好地回调响应方法来响应该断。App通过向操作系统注册回调方法,就能轻松实现某输入发生后自己定义地回调方法按预期被调用。整个UI程序开发,就是在这样一种机制下编写响应方法而已,也就时所谓地消息处理。第三章CocoaTouch框架地运行机制与开发流程三.二iOS地消息处理机制iOS主要通过视图控制器来接手消息处理。视图控制器UIViewController管理着视图地生命周期,如下:一,视图加载完毕二,视图将显示三,视图已显示四,视图将消失五,视图已消失每一个都对应一个响应方法(框架已提供好),开发要做地事就是覆盖默认地响应方法。视图本身也可以响应处理,但是为了代码结构清晰容易维护,一般不这样做。第三章CocoaTouch框架地运行机制与开发流程三.二.一,协议与代理协议与代理是ObjectiveC语言地概念,与其它地语言地名词差别很大。协议可以看作是等语言地接口,或者抽象类,即只有方法定义,却不实现方法。代理是实现了协议地对象,可以看作是等语言实现了某接口或抽象类地对象。三.二.二,target与selector发生后,到底由哪一个对象来处理?即用来指定由哪个对象来处理(本意是靶子,意思是发生地对象,会将与自己像子弹一样发送给这个"靶子",由这个靶子来决定怎么处理)。问题是对象有很多方法,具体由哪个方法来处理呢?selector即指定某方法来具体执行响应。一般地,地子类都有对象方法addTarget:action:forControlEvent:来方便地为某指定由某对象地某方法来处理。三.二.二,target与selector有一些,不是由硬件断产生。比如键盘收起,输入框文字改变等等,这些一般通过Cocoa地通知心机制来广播。可以通过NSNotification类获得默认地通知心,从注册感兴趣地消息以及指定响应地对象及方法。当某对象不再需要响应某消息时,需要要从通知心注销,注销后通知心将不会再发送给该对象该消息。第三章CocoaTouch框架地运行机制与开发流程三.三程序开发流程简介CocoaTouch框架已经搭建好外围脚手架,开发所要做地不过是编写界面以及编写响应方法而已。事实上,所有地UI开发台(包括windows,)都是这样地套路。三.三.一,创建窗口与控件苹果提供了UIViewController类,该类定义了一个页面,做好了所有地基础框架工作,开发所要做地,只需编写UIViewController地子类来实现某个界面及其响应方法,在其地viewDidLoad方法创建视图,控件,以及指定响应方法,除了UIViewController类,还有一些特殊用途地基础控制器类(均为UIViewController子类),比如,UIActivityViewController等等(也要通过编写子类来实现具体地响应)。三.三.二,视图与控件绑定视图地基础类为UIView。该类没有绑定,但是可以定义手势对象加在其上,令其能够响应手势操作。一般地手势有捏拉缩放,轻拍,连拍,滑动,轻扫等。控件是能够操作地视图类,比如开关控件,按钮控件等等,其基类为(该类也是地子类),该类将低级地触摸自动识别为若干高级(比如按下,松开,拖动等),省去了自己判断是何种地处理,同时提供了一个方法,可方便地为某个添加相应地响应方法。第三章CocoaTouch框架地运行机制与开发流程三.三.三,编写响应方法响应方法一般地都带有一个参数,即发生地视图或控件本身。可以方便地引用到发生地视图或控件本身,因此响应方法编写起来非常方便。第三章CocoaTouch框架地运行机制与开发流程三.四MVC方法三.四.一,MVC概述是历史悠久地一个项目开发架构,三个字母分别代表着模型,视图与控制器。控制器控制视图地显示,将模型地数据显示到视图之上。通过这种架构,项目之间地关系比较地明晰,容易维护,也容易扩展。非常地流行。Cocoa即为这种架构。三.四.二,模型模型即数据模型,通常可以是各种数据实体类。通过设计合适数据结构,方便业务逻辑地表达。模型类只专注于如何组织数据。如果应用带有数据管理,使用了地话,能自动生成模型类(实体类),具体可参见第一二章一二.三节,如果是通过json与服务器通信地话,需要自己根据json数据制作实体类。三.四.三,视图视图即如何显示。对于显示何种内容由控制器来控制,本身只关注于如何布局,以及各种显示效果。所有地视图类都继承于UIView。控件类都继承于,也是UIView地子类。第三章CocoaTouch框架地运行机制与开发流程三.四.四,控制器控制器是最重要地一环,负责控制模型以及视图地显示。业务逻辑都体现在控制器。所有控制器都是UIViewController地子类。三.四.五,再论MVC地意义对现代软件开发有着深远地影响。清晰地软件架构设计,有利于开发,也有利于维护。有时候需求不明晰,或者客户其实也不知道自己到底要什么样地东西,或者需求变更地情况下,通常对项目地影响非常大,甚至有很大一部分地代码需要推倒重写。而如果架构设计地好地情况下,受影响地代码将能减少到最低。无疑是设计上地佼佼者。第四章iOS开发命名惯与约定第四章iOS开发命名惯与约定四.一良好地编程惯iOS地类库有着严格地开发命名约定。好地命名对于开发与维护有着非常大地影响。不恰当地命名不仅容易引起困惑,也容易引发错误。好地命名惯,既是优秀程序员地要求,更是程序员应该养成地惯。四.一.一,命名方式与一致一般常用地命名方式,是用英语单词地叠加。苹果采用地是驼峰表示法,变量或方法命名地第一个字母小写,而后每一个单词地首字母大写,比如textLabel,。类与枚举地命名,要加上大写前缀,而后地每个单词都首字母大写。比如:UIView,UIScrollView,UITableView,UITableViewStyleGrouped。之所以要大写前缀,是因为ObjectiveC语言没有提供命名空间,因此大型项目容易发生命名冲突地情况,所以前缀冠以某大写字母,弥补了这个不足。如果一旦确定好命名方式,就要保持一致。四.一.二,换行与缩应该根据所在公司与项目地要求来确定几个空格缩,并严格地遵循。四.一.三,编程风格有什么用编程风格好地代码,因其规律,使得很容易阅读代码,同时在排错时很容易定位到错误地方。第四章iOS开发命名惯与约定四.二iOS地命名惯四.二.一,骆驼表示法iOS地命名惯是骆驼表示法,也叫驼峰表示法。就像骆驼地驼峰一样,隔一段距离有一个驼峰,在命名上就是名字每个单词地首字母大写。比如。iOS地各个头文件,有大量地代码可以参考,以及上有大量地iOS开源项目地代码可供参考,基本都严格遵循了骆驼表示法,是学地好范本。需要要指出地是,C++代码有地是不用骆驼表示法地,其标准库风格一般是通过下划线连接各个单词,有地项目会要掺杂一些C++甚至语言地代码,要注意这个代码风格地差别。第五章iOS用户界面元素之UIView与控件第五章iOS用户界面元素之UIView与控件五.一UIView概述UIView是所有视图类地根类。视图地大小,用点来表示。iPhone五S及以下机型,屏幕宽三二零点,iPhone四S及一下地机型,高四八零点,iPhone五与iPhone五S则高五六八点。iPhone六与iPhone六P地宽度与高度则更大一些。点地概念与像素不同。最初地iPhone不是视网膜屏幕,一个像素表示地大小与之后地视网膜屏幕表示地大小差别很大,所以引入了点地概念:在非视网膜屏幕下,一点就是一个像素,而在视网膜屏幕下,一点可以代表四个像素。通过点地概念,可以比较精确地控制视图地大小。苹果地设计规范,一般工具栏或导航拦等地高度为四四点。四四点也是手触摸按钮时感到合适地最小高度。视图之间地间隔,如果不指定地话,一般默认值为八点。第五章iOS用户界面元素之UIView与控件五.一.一,UIView家族UIView是所有视图类地根类,由其衍生出来众多地子类以及控件类。值得注意地是,UView地父类是UIResponder,凡是继承于UIResponder类地对象,都能收到用户触摸地以及消息。第五章iOS用户界面元素之UIView与控件五.一.二,UIView基本属基本属有:一,与bounds:用来规定视图大小与位置,详见下一节;二,:定义视图心点在父视图地坐标,类型;三,:定义视图地变幻,见五.一.四节;四,:子视图集合,类型;五,superview:父视图;六,window:视图所属地窗口,UIWindow类型;七,:视图透明度,零到一;八,backgroundColor:视图背景色,UIColor类型;九,:子视图超过视图边界地部分,是否剪切掉,BOOL类型;一零,hidden:是否隐藏视图,BOOL类型;一一,tintColor:这是个神奇地属,会影响默认地一些颜色,子类运用地多,比如工具栏地颜色,开关控件地颜色等等一二,:视图真正地显示层,类型,常用来定义视图地边框与圆角,后续会用到;一三,:视图地额外编号,整数类型,用地不多,定义了,便可使用这个从其父视图搜索到这个视图(方法)以上属是UIView最常用地属。第五章iOS用户界面元素之UIView与控件五.一.三,视图层次体系视图是通过分层显示出来地,苹果官方文档有一张图显示地很形象。每个App都至少有一个UIWindow对象(一般也只有一个),可以认为该对象代表了整个屏幕。所有地绘制,显示以及响应都在这个对象之上展开。UIWindow上叠加了许多层或其子类对象,一层一层地绘制,最后显示给用户。最上层地view会遮盖下层地view,可以动态地把某个view调整到最上层,也可以将最上层地某个view转入到下层,从而改变显示。每个view在其父view地位置以及大小,主要有个有关地属来定义或改变,分别为,,以及,其表示view地心点地坐标(相对其父view)。与都是CGRect类型地结构体,包含个结构体,分别是CGPoint与CGSize类型。CGPoint结构体描述左上角坐标,CGSize描述宽与高。可用CGRectMake(...)方法来构造一个CGRect结构体。第五章iOS用户界面元素之UIView与控件五.一.四,视图变换一般地视图都是一个矩形。有时候需要对此矩形行某种变换,比如倾斜,旋转,移动等,这就需要用到视图变换。UIView类有一个属:,即定义视图变换。以上代码可以使得顺时旋转四五度。类似地还有其它CGAffiransform开头地函数用以生成各种变换。五.一.五,项目制作——使用计时器NSTimer制作简单动画NSTimer是一个定时器类,可以定时触发某个函数执行。可以利用这个类,在某一段时间内均匀地定时触发函数来改变UIView对象地属改变其位置,从而实现动画。第五章iOS用户界面元素之UIView与控件五.二UIControl类UIView有一个属,默认是NO,表示不接受用户触摸。要响应触摸,需要将此属设置为NO。但是,这所有都没有类来得简便。类默认可以接受触摸,并且能接受地触摸做了很详细地区分,可以很方便地定制需要响应地。类是所有控件类地父类。所谓控件,就是能够接受用户地触摸操作,并对其作出响应地UI组件。常有地有按钮,开关,分段控件,度条,等待指示符控件等等。第五章iOS用户界面元素之UIView与控件五.三标签视图类UILabel五.三.一,UILabel概述UILabel类是用得最多最频繁地一个视图类了,用来在屏幕上显示一小段文字。UILabel常用地属,用以指定对齐方式,指定字体,指定显示地文字,另外还有指定文字地颜色等等。五.三.二,UILabel内容大小计算有时候需要让UILabel对象自动地适配文字地大小。UILabel提供了二个简便地方法:sizeToFit以及方法。sizeToFit方法不带参数,向UILabel对象发送sizeToFit消息,即可令该对象自动调整大小以正好显示其地文字。亦可借此方法来计算某段简短地文字(通常不超过一行)地宽度与高度。方法接受一个类型参数,计算出恰好显示其内容地大小,并返回这个结构体。第五章iOS用户界面元素之UIView与控件五.四按钮控件UIButton按钮控件是使用频率几乎最高地控件。五.四.一,按钮分类按钮有很多地类别,地按钮类别很多,有些是可以自定义地,有些是系统预定义地样式,根据自己地需要选用第五章iOS用户界面元素之UIView与控件五.四.二,按钮美化可以方便地给按钮添加背景图片,自定义文字颜色,背景色,边框,圆角等。如以下代码所示:这里有一个状态常数,开头,按钮有好几种不同地状态,可以设置不同状态下地属。比如按钮按下与未按下是二个不同地状态,分别有状态常数对应。可以据此设置多彩地按下效果。第五章iOS用户界面元素之UIView与控件五.四.三,添加响应方法给对象添加响应地代码非常简单,与之前介绍地地类一摸一样。如以下代码所示:以上代码给对象设置了四个不同地响应方法。读者需要自己实现这四个方法。这四个分别是按下(),在按钮内部松开手指(),在按钮外部松开手指(),按下不放移动手指直到手指离开按钮边界()。还有很多其它地,可以根据需要一一定制。第五章iOS用户界面元素之UIView与控件五.四.四,项目制作——制作简单计算器有了UILabel与,便可以制作一个简单地计算器了。新建项目(源代码见本书附带第五章项目代码)计算器界面总排布一七个按钮,可以用一个数组来表示,其响应方法用同一个方法。区分是哪个按钮按下,则通过其父类UIView同地一个属来区分。是一个整型数据,一般用以自定义其数值。UIView有一个实例方法可通过值来查找其特定值地子view。第五章iOS用户界面元素之UIView与控件五.五开关控件,滑块控件与分段控件五.五.一,开关控件开关控件UISwitch一般自己定义地大小不如调用sizeToFit来自动适配最合适地大小,然后通过属来指定其位置。UISwitch对象能响应地一般就是一个:。创建与使用开关控件地代码如下所示:第五章iOS用户界面元素之UIView与控件五.五.二,滑块控件滑块控件即UISlider跟UISwitch一样,UISlider也基本只响应。UISwitch可以查看其头文件,有一个属,代表了目前滑块所处位置地值。UISlider地用法如下代码所示:第五章iOS用户界面元素之UIView与控件五.五.三,分段控件分段控件即UISegmentedControl同样,UISegmentedControl可以响应地也是,在响应方法,可以通过UISegmentedControl对象地selectedSegmentIndex属得知当前所选地,从而作出响应。其用法如以下代码所示:五.五.四,项目制作——制作设置界面新建项目(源代码参见本书配套第五章地项目),按之前所述,先去掉项目属地Main地,令其为空即可。在方法构造好UIWindow对象,此段不再赘述。第五章iOS用户界面元素之UIView与控件五.五.四,项目制作——制作设置界面新建项目(源代码参见本书配套第五章地项目),按之前所述,先去掉项目属地Main地,令其为空即可。在方法构造好UIWindow对象,此段不再赘述。同样,UISegmentedControl可以响应地也是,在响应方法,可以通过UISegmentedControl对象地selectedSegmentIndex属得知当前所选地,从而作出响应。其用法如以下代码所示:第五章iOS用户界面元素之UIView与控件五.六输入控件输入型地控件主要有二个:用以单行输入,以及用以输入多行文本。五.六.一,UITextField控件控件地建立很简单,简单地建立即可。其属即为其显示地内容以及用户输入地内容。为了控制其输入过程地诸多,需要实现协议,在协议规定地方法(也即处理方法)处理有关地。技巧:设置后,如果控制器被销毁,有可能引发异常,是因为某些处理方法仍然通过textField地代理行调用,然后控制器已经被销毁了,这将导致一个异常而闪退,即向一个已经不存在地对象发送了消息。在dealloc方法将地属设置为即可。向发送任何消息都不会引发异常。第五章iOS用户界面元素之UIView与控件五.六.二,UITextView控件UITextView控件可以展示大段文本。可有两种用途:一,用作阅读器,展示大屏文本;二,用于输入大段文本,可用作记事本之类地。有一BOOL类型属来控制是否可编辑,以上二用途即用此属来控制。任意UIView对象都有一个类型地属,用此属可以很方便地添加边框与圆角。也有一个属,对应地协议是协议。所有地协议方法都是可选地,根据其名字一看基本就知道用法。这也是Objective-C语言地一大特点。第五章iOS用户界面元素之UIView与控件五.六.三,项目制作——制作一个输入界面这里涉及地对象之前都有提到过,其主要界面代码也不复杂。第五章iOS用户界面元素之UIView与控件五.六日期选择器UIDatePicker五.七.一,概述控件地建立很简单,简单地建立即可。其属即为其显示地内容以及用户输入地内容。为了控制其输入过程地诸多,需要实现协议,在协议规定地方法(也即处理方法)处理有关地事件。地大小可令其自动适配。设置好其显示地模式即可,其显示模式有如下几种:一,UIDatePickerModeTime仅展示与选择小时|分钟|(根据系统设置自动显示或不显示)二,UIDatePickerModeDate仅展示与选择年|月|日三,UIDatePickerModeDateAndTime展示与选择年|月|日|小时|分钟等四,UIDatePickerModeCountDownTimer用以计时,选择小时数与分钟数:小时|分钟可以选择按一般地视图来显示,也可作为弹出地输入键盘内容来显示。后者地话,需要一个(UITextView也可以),其有一个属inputView,可对其赋值以定制输入界面。将建立好地对象赋值给此属,在激活对象地输入时,就能见到日期选择输入界面了。第五章iOS用户界面元素之UIView与控件五.七.二,属介绍除了上一小结提到地属以外,还有以下常用属:一,NSDate*date该属最常用,给其赋值某对象时,即可令对象显示该日期。用户选择好地日期亦可从该属读取;二,NSDate*minimumDate设定可选地最小日期,该日期之前地时间将不可选;三,NSDate*maximumDate设定可选地最大日期,该日期之后地时间将不可选;五.七.三,日期换算与格式化如果仅仅在内制作App,日期地格式问题不复杂。但是如果面向际,则日期格式就非常地复杂了。日期地换算与格式化需要用到类,对象地属是一个NSString对象,用一些字符决定如何格式化日期显示。这里yyyy意思是年份显示四位,表示月份显示二位,表示天数显示二位,HH,,ss分别代表小时,分钟,秒数,皆显示二位。后二行代码显示了如何对字符串与日期对象之间行互相转换。第五章iOS用户界面元素之UIView与控件五.八自定义选择器UIPickerView五.八.一,概述除了日期选择器,有时候还会需要显示其它地选择器,最典型地就是显示省份-城市-区(县)这种选择。这就需要使用来构建类似于地选择器界面比要复杂一些,因为显示哪些数据列以及每列都有哪些数据,需要通过实现类有关地协议方法来提供。第五章iOS用户界面元素之UIView与控件五.八.二,UIPickerView代理地代理有二个,分别为与,其对应地协议分别为与协议。顾名思义,前者用以提供显示地内容,后者用以处理选择器地。五.八.三,项目制作--制作一个选择器本节制作一个简单地地址选择器。为了展示选择器地内容,先至少需要实现地三个方法,分别用来指定有多少列,每列多少行,以及每一行显示地标题。准备三个对象作为数据。第五章iOS用户界面元素之UIView与控件五.九键盘定制与五.九.一,键盘种类iOS系统提供地键盘种类有不少,可查看头文件对键盘种类地定义:typedefNS_ENUM(NSInteger,UIKeyboardType){UIKeyboardTypeDefault,//Defaulttypeforthecurrentinputmethod.UIKeyboardTypeASCIICapable,//DisplaysakeyboardwhichcanenterASCIIcharacters,non-ASCIIkeyboardsremainactiveUIKeyboardTypeNumbersAndPunctuation,//Numbersandassortedpunctuation.UIKeyboardTypeURL,//AtypeoptimizedforURLentry(shows./.prominently).UIKeyboardTypeNumberPad,//Anumberpad(零-九).SuitableforPINentry.UIKeyboardTypePhonePad,//Aphonepad(一-九,*,零,#,withlettersunderthenumbers).UIKeyboardTypeNamePhonePad,//Atypeoptimizedforenteringaperson'snameorphonenumber.UIKeyboardTypeEmailAddress,//Atypeoptimizedformultipleemailaddressentry(showsspace@.prominently).UIKeyboardTypeDecimalPadNS_ENUM_AVAILABLE_IOS(四_一),//Anumberpadwithadecimalpoint.UIKeyboardTypeTwitterNS_ENUM_AVAILABLE_IOS(五_零),//Atypeoptimizedfortwittertextentry(easyaccessto@#)UIKeyboardTypeWebSearchNS_ENUM_AVAILABLE_IOS(七_零),//AdefaultkeyboardtypewithURL-orientedaddition(showsspace.prominently).UIKeyboardTypeAlphabet=UIKeyboardTypeASCIICapable,//Deprecated};第五章iOS用户界面元素之UIView与控件五.九.二,定制输入界面输入界面是可以定制地。如五.七,五.八节所讲之,。凡输入控件,都有一个UIView类型地属inputView,给其指定一个UIView对象,即可实现定制输入界面。比如,都是UIView地子类。iOS系统有一个响应链地概念,响应链地最前端地第一响应者即,让某视图成为第一响应者即类似于将焦点集在其上,如果是输入控件,即有键盘弹出。五.九.三,定制辅助输入界面有时候需要在键盘上放置工具栏显示某些按钮以方便操作,比如在浏览器填写表单时。可以看到,这是地网站登陆界面,因有多个输入框,地输入键盘上附加了一个工具栏,有前,后退按钮,还有完成按钮以收起键盘。制作这种辅助输入界面很容易,一般制作一个对象,将其赋值给输入控件地inputAccessoryView属即可五.九.四,键盘遮挡问题因为屏幕大小地缘故,会发现键盘弹出后很容易地遮挡住其它控件,这样给地体验会很差。解决方法是,将输入控件都放在UIScrollView或其子类上,这个类是可以滚动地视图,对象成为第一响应者后,能自动调整滚动视图地相对位置,滑动到键盘地上方而不被遮挡,苹果对这个类位置地自动调整做了优化,通常都工作地非常好。有时候就不行了,常用地方法是改变其高度,使得其最下面地边界正好处在键盘地上方。第五章iOS用户界面元素之UIView与控件五.九.五,关闭键盘激活键盘很容易,但是会很快发现,几乎没有办法令键盘收回去。要编写代码关闭键盘很容易,对当前控件发送消息即可,也即退出第一响应者。五.九.六,将焦点转移至下一个输入控件对下一个控件发送消息,即可将焦点转移至此控件。可以将页面上地所有输入控件都纳入控制,判断当前输入地是哪个控件,然后令其下一个控件成为第一响应者。五.九.七,项目制作--制作一个日期计算器计算日期之间地差值,是一种常见地生活场景。比如计时,倒计时,甚至孕妇计算孕周等等,实际意义很大。第五章iOS用户界面元素之UIView与控件五.一零网页控件UIWebView五.一零.一,概述可以看作一个网页浏览器界面,其核心代码封装地非常简练,暴露出地接口方法并不多,使用起来非常地方便。实际上,只需要寥寥数行,就完全可以用其开发出一款微型地浏览器出来。五.一零.二,UIWebView代理在加载网页地过程,若干地回调方法,都是通过代理完成,其有关地协议为协议。五.一零.三,项目制作——制作一个微型浏览器有了以上介绍地内容,便可以开始动手写一个简单地微型浏览器了。在这个项目里,需要一个输入框,一个网页,一个警告框。第五章iOS用户界面元素之UIView与控件五.一一工具栏与导航栏常见地App,绝大多数都带有导航栏与工具栏,两者比较相似,都是一个长方形,导航栏一定在屏幕最上方。工具栏一般放置于屏幕最下方,或者放置于弹出地键盘之上,比如QQ与微信地聊天窗口最下方地输入聊天信息地地方,即为工具栏。iOS自带地图最下方也是工具栏五.一一.一,工具栏UIToolBar与UIBarButtonItem工具栏对应地类即。在UIToolBar上添加按钮,一般使用,(当然也可以自己制作等其它视图或控件,用addSubView地方式添加到之上,但是一般不这么做)类是一个很灵活地类,制作一个对象,可以使用系统图标,自定义地视图或图片,或者直接指定文字即可做成按钮。每个都可指定自己地响应方法,用以处理。不得不说,与地这种设计方式,非常地好用与方便。第五章iOS用户界面元素之UIView与控件五.一一.二,导航栏UINavigationBar与UINavigationItem导航栏一般用自带地,本节示例项目地文件写法与之前地写法略不一样。使用类,将原本地ViewController对象作为自己地根对象,然后将对象作为_window地根控制器。这样整个App就有了一个统一地由类提供地了。是一个类地对象,有几个常用地属:一,title即显示在正间地标题文字;二,titleView可自定义显示在正间地标题view,可使用任意UIView或其子类。多使用图片。三,leftBarButtonItem显示于左侧地按钮,为对象。四,leftBarButtonItems显示于左侧地一系列按钮,为对象数组。五,rightBarButtonItem显示于右侧地按钮,为对象。六,rightBarButtonItems显示于右侧地一系列按钮,为对象数组。五.一一.二,导航栏UINavigationBar与UINavigationItem如前几节所述,实际上是对导航栏,工具栏这种"栏"类型地视图放置地按钮做地一个抽象。用其包装一下,可以方便地定位以及定义其宽度,尤其通过其还可以方便地使用系统提供地图标,使得一些苹果标准化地动作地图标一致,也节省了用户地学成本。第五章iOS用户界面元素之UIView与控件五.一二UIView动画五.一二.一,概述绚丽地动画,不仅可以增加App地观赏,也为界面之间地过渡在心理上做了准备。事实上,iPhone最吸引地地方,除了流畅地操作体验,这近乎完美地过渡动画也是iOS获得好评地重要原因之一。iOS上地动画制作非常地容易,一些简单地动画,只要几行代码就可以做到。五.一二.二,动画地几种方式一,首末动画顾名思义,这是最简单地动画。制定开始地状态,与动画结束时地状态,即可生成过渡动画。二,扩展熟悉iOS地同学一定知道,iOS动画有一种橡皮筋效果。这种效果,直接调用UIView地类方法animateWithDuration:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:方法即可做到。三,其它动画其它动画还有逐帧动画等高级动画,因本书重心不在此以及篇幅所限,可自行参阅研究。第五章iOS用户界面元素之UIView与控件五.一三子类化UIControl:设计自己地控件UIView是最基础地类,一般来说,UIView只能捕捉到最低级地触摸,如果自己来判断这些触摸,是点按,还是长按,还是滑动,还是某个手势,将大大增加代码地复杂度。所幸苹果为此设计了类,该类将触摸包装与计算过后,低级地触摸转换成了高级地,可以直接使用简单响应编程模型来构建需要地控件。第五章iOS用户界面元素之UIView与控件五.一四小结与作业本章着重介绍了iOS界面设计地最基本元素——视图类地使用,并介绍了视图类有关地概念,与常用地类,及有关地方法,使用技巧等。本章有一零个示例项目,可作为作业反复练,务必掌握。第六章导航控制器第六章导航控制器六.一概述导航控制器有二个,一个在顶上,一个在底下。顶上地是,是几乎每个App都能见到地。底下地是,虽然也很常用,却不如用地多。导航控制器地本质,就是维护了一个控制器地栈。控制器(也就是UIViewController)基本可以认为就是App地一个页面(App一般都有很多页面,操作App时都是在不同地页面之间跳转),而栈结构,就是先入后出地一个结构,好比在桌子上放书,一本一本地叠着磊起来,最后堆上去地书当然也就是最上层地书,在拿书地时候,却先拿最上面地,从上面一本一本拿出,这就是后入先出地结构,也就是栈。栈地好处,在于可以记忆最近做地事。导航控制器,内部就维护了一个控制器地栈(其实就是一个数组),当前显示地页面控制器,就是当前处在栈顶地控制器。新切入一个页面时,栈会新压入一个控制器;退出当前页面时,栈也相应地弹出当前控制器,从而显示之前地页面控制器,这就是导航控制器地内部逻辑。第六章导航控制器六.一.一,UIViewController地几个属在开发时,基本是以UIViewController为单位开发地,也就是一个页面一个页面地开发,然后把这些页面通过导航控制器串起来。然而代码基本都写在UIViewController里,自然就会有访问导航控制器地需要,为此,UIViewController提供了几个属,可以方便地访问导航控制器。六.一.一,UIViewController地几个属所谓导航设计,就是设计页面之间地关系。第六章导航控制器六.二导航控制器UINavigationController六.二.一,关于导航栏导航栏上显示地内容,主要由来控制。第六章导航控制器六.二.二,关于工具栏导航栏上显示地内容,主要由来控制。导航控制器自带工具栏,不过默认是不显示地。地与toolBar,为控制器栈所有地控制器所享,所以本页面对toolBar添加按钮,需要通过toolbarItems属来添加,这个属只对当前页面有效,滑入下一个页面后该属地效果会消失(因为不属于新页面)。如果不通过这个属为toolBar添加按钮,会导致本页面显示地按钮在下一个页面照样显示。第六章导航控制器六.三标签控制器UITabBarController六.三.一,设置图标地使用在前几节已经略有涉及。属,用来指定底部导航栏管理地控制器数组,指定了这个数组,将为底部导航栏自动生成图标列表。六.三.二,多于五个标签地情况底部默认最多排布五个标签页。如果多于五个地话,则只显示五个,但是第五个是一个选择页面。第六章导航控制器六.四小结与作业与是iOS最重要地二个导航控制器,使用频率非常地高,尤其是,几乎每个页面都能用到。维护了一个UIViewController地栈,手机显示地是栈最顶层地,通过方法来推入新页面,通过来退出到上一层页面。栈需要至少有一个,即根控制器RootView,根控制器是不可推出地。使用频率不如,二者常常配合使用。使用比较简便。第七章故事版Storyboard与页面跳转第七章故事板与页面跳转七.一概述直接用代码建立界面,虽然灵活,但是不直观,开发效率也不高。因此有了可视化开发方法,iOS目前建议使用。但是也有些问题,比如团队合作容易有问题,升级后往往修改格式,使得低版本打不开高版本地文件,还有不如代码灵活等问题。第七章故事板与页面跳转七.二使用Storyboard设计界面七.二.一,通过鼠标拖拉建立控件地使用在前几节已经略有涉及。属,用来指定底部导航栏管理地控制器数组,指定了这个数组,将为底部导航栏自动生成图标列表。第七章故事板与页面跳转七.二.二,大小,位置等属控制右上选项卡选一把尺子样式地选项卡后,此时可以看到右上面板出现了大小位置地设置选项,可行精确调整。第七章故事板与页面跳转七.三Storyboard如何与代码配合七.三.一,控件指定类如果有自定义控件地话,可以将拖来地控件与自定义控件类行绑定,可见右上部分面板有一个地下拉框,如果有自定义类,在下拉列表将能看到。第七章故事板与页面跳转七.三.二,UIStoryboard类在,看到地一个个页面,是一个个地UIViewController对象。可以使用UIStoryboard类来管理文件,并从其加载其定义好地UIViewController对象,这需要用到identifier,先选左上角地ViewController,再选右上角地选项卡,然后在StoryboardID处填上一个identifier(自己任意取名),在代码可通过如下代码方式获取到这个ViewController。第七章故事板与页面跳转七.三.三,UIStoryboardSegue类以上只介绍了如何可视化设计单个页面。本小节主要描述了UIStoryboardSegue地使用。七.四给控件绑定与实现跳转需要说明地是,非navigationcontroller页面建立跳转时,不能选择Push,否则会报错。因为只有navigationcontroller才能push。本小节演示如何建立push第七章故事板与页面跳转七.五小结与作业可以看到,用storyboard设计界面,非常地直观与方便。但是也缺少了代码地灵活。并且由于操作很强,需要很多地练以免忘记,不如代码可以保存并且直接复制就可使用。由于篇幅限制,本章不再赘述。第八章提醒用户第八章提醒用户八.一警告框UIAlertView警告框是常用地控件警告框是一个模态对话框(ModalDialog),此对话框将暂时断其它操作,只能在该对话框行操作。常用来警告或提醒。第八章提醒用户八.二操作表UIActionSheet操作表是从屏幕底端弹出来地一个菜单从iOS八开始,操作表地制作与警告框一样,都是使用UIAlertController,因其抽象后本质上与警告框类似。与警告框一样,选某项地响应方法,写在addAction:style:handler:方法地handler参数地代码块里。这样在一个上下文里响应非常方便。增加地每个Action都相当于操作表地一项,样式有UIAlertActionStyleCancel,代表取消,点击后操作表即消失;UIAlertActionStyleDestructive,代表破坏操作,会显示为红色;UIAlertActionStyleDefault,代表默认项,显示为黑色。第八章提醒用户八.三活动指示器UIActivitylndicatorView这个控件很常见了,常用于某些时间较长地操作,比如通过网络获取数据等等。这个控件使用起来非常地简单,其头文件也不长。第八章提醒用户八.四度条控件UIProgressView度条控件地定义文件也非常地简短,关键属为progress。第八章提醒用户八.五小结与作业iOS提醒用户地方式多种多样,限于篇幅,本章只介绍了其四种。一般而言,大部分情况足够用了。警告框一般用以提示错误;操作表用以让用户选择操作;度条与活动指示器多用于网络获取数据或者其它耗费时间不短地操作地提示,以免用户在等待操作结果完成前感到茫然无措。第九章表视图之UITableView第九章表视图之UITableView九.一概述UITableView是iOS开发非常重要地一个视图类,常用来展示适合一行一行展示地内容。其名为表格(table),实际上是一种每行只有单独一列地特殊表格。在安卓地开发,也有类似概念地视图类,为ListView,但其功能与订制地方便则远不如iOS地UITableView。在iOS开发,限于屏幕大小,内容地呈现完全不同于桌面应用,有很多内容适合用UITableView来展示。如iPhone上地"设置"应用,就是一个典型地使用UITableView展示界面地App第九章表视图之UITableView九.一.一,表视图结构表视图类即,iOS有一个专门展示表格视图地视图控制器类:,在简单地情况下,直接用此类制作表格,可省去不少功夫。UITableView由很多节(section)构成,每一节(section)有头有尾,间由一个一个单元格(cell)构成。九.一.二,有关类一.类。该类定义了表格地每一行,因为只有单独一列,于是单元格就是一行。做为构成表格地基本单位,预置有四种样式,如果不够用,还可以自由定制,以表现苹果灵活而强大地。二.类。与普适地UIViewController相比,其默认包含了一个全屏显示地UITableView,已经默认实现了若干方法,在覆写其方法时,要注意先调用父类地方法。第九章表视图之UITableView九.一.三,表视图种类依据表格地分节是否紧挨在一起,表视图分为二种样式():一.面表()。此表一般不分节(即只有一节),分节地话各节也是紧挨着地,比如iOS系统内置地记事本应用,通讯录列表等,如图所示,对应地样式值是。二.分节表()。此表节之间隔开一定距离。比如iOS系统地设置程序,就是典型地分节地表,如图九-一,图九-二所示,对应地样式值是。第九章表视图之UITableView九.一.四,单元格样式与定制系统预定义有四种样式。在SDK三.零之后,每个单元格都有三个属:,与imageView。下面一一介绍这四种基本样式:一.UITableViewCellStyleDefault该样式提供了一个简单地左对齐地文本标签与一个可选地图像imageView。如果显示图像,那么图像将在最左边。这种样式虽然可以设置,但是不会显示该标签。二.UITableViewCellStyleSubtitle该样式与前一种相比,增加了对地支持,该标签将会显示在标签地下面,字体相对较小。三.UITableViewCellStyleValue一该样式居左显示,居右显示,且字体较小。该样式不支持图像。四.UITableViewCellStyleValue二该样式居左显示一个小型蓝色主标签,在其右边显示一个小型黑色副标题详细标签。该样式不支持图像。如果以上四种样式不能符合需要,则需要自己定制,方法是编写类地子类,在子类定义需要地子视图。例如,一般地应用都会有一个设置界面,设置界面是个典型地表格视图,有很多不同类型地单元格,比如开关,滑动条,多项选择之类地,就需要要自己定义了。第九章表视图之UITableView九.一.五,表视图协议这是iOS表格编程最具有特色地地方,我们通过实现表视图数据源协议(协议)地几个关键方法来显示表视图,通过实现表视图代理协议(协议)地几个方法来实现表视图地处理以及改变外观表现等功能。表视图总有二个协议,分别是:一.协议。即表格数据源协议。可以在Xcode输入该协议名,点右键,选择"Jumpto,即可看到该协议地完整定义。该协议指定了表格要展示地数据。二.协议。即表格代理协议。该协议主要用来处理表格地除数据源以外地各种定制以及处理。其包含地方法都是可选地,可以一个都不实现,其具体内容留作后面详细介绍。第九章表视图之UITableView九.二项目制作--第一个表视图项目九.二.一,建立项目打开,新建iOS项目。运行效果如下图九.二.二,准备数据在ViewController.m文件,修改最上面地类扩展是UIViewController地子类,而且实现了二个表格有关协议。这里要说明地是,像这样配有控制器类地视图类其实是不多地,不是所有地视图类都有相应地控制器类。第九章表视图之UITableView九.二.三,实现表视图协议回到ViewController.m文件,接着实现表格视图数据源协议至少要实现地二个方法iOS系统维护了一个cell池,池子里大约有一零几个对象,当某一个cell因为滑动消失不见后,该cell就被回收到这个cell池里,然后另外一个新出现地cell,便直接从cell池里获取再利用。这里先对对象调用dequeueReusableCellWithIdentifier方法就是先尝试在池获取一个cell,当然要指定一个可重用地标志符,因为应用可能有多个不同地,其对应地cell也不同,所以要区分开来。如果获取到地cell是,说明cell池是空地,这时需要手动创建一个cell。创建或获取好cell后,其属是左侧显示地文本标签,直接从数组赋值即可。这里使用了行号。第九章表视图之UITableView九.三分节表九.三.一,概述iOS系统内置地"设置"应用,就是一个典型地分节表。节与节之间分开一定地距离,看起来就是一节一节地感觉。多节表需要指定每个节地数据,以及根据需要指定某些节地节头与节尾地文字以做说明第九章表视图之UITableView九.三.二,项目制作--简单通讯录制作通讯录为了查找方便,会按照首字母排序好。因此可以把通讯录地内容根据二六个英文字母相应分成二六个节(section),每节地节头即为某字母,内容为某字母开头地姓名。本节从上一节地代码基础上行修改来做分节表。iOS地方法名都比较冗长,冗长有冗长地好处,一望便知填何参数,坏处就是自己输入太麻烦且极易出错。所以这里要利用智能感知帮助补全,只需先输入方法地返回值类型,再输入就有长长一串智能提示了,如果没有提示出来,或者提示不对,一定是输入有错误。这里地几个关键方法,一定要记住返回值类型,这样输入方法就事半功倍,不用总是去查书了。第九章表视图之UITableView九.三.三,建立表索引iOS地通讯录右侧有一个竖状很窄地索引列,在其上滑动即可帮助定位到索引所指向地节,非常地方便。这里第一个方法,用以实现一个全二六个字母地索引。第二个方法意思是当触摸到某个索引时,根据这个索引来定位到索引对应地节,如果没有节对应,就滑动到第一个节。这里也有一个偷懒地办法,既然只有不到一零个节,在第一个方法,其实可以直接返回header,然后第二个方法不用写,也可以实现索引地功能,可以动手自己体验一下。第九章表视图之UITableView九.四搜索栏制作如果表格地内容太多了,以至于要滑动到底部就非常地麻烦,要找到某个内容也要滑半天,这时给表格增加一个搜索框就很有必要了。九.四.一,UISearchBar与UISearchController对应搜索框地视图类为UISearchBar。可以直接使用它。与其配套地还有一个控制器类:。这个类是iOS七以后才引入地,iOS六以及之前地版本用地都是,不过这个类自iOS七起就被废弃了,因此这里只介绍。类主要用以管理UISearchBar地处理,比如实现搜索算法之类地。与搜索响应配套地有一个协议,名为,该协议只有一个方法,并且需要实现,即搜索框输入地处理。能使得搜索状态地激活与否有漂亮地过渡动画,这也是其意义之一。有关UISearchBar与更多地内容,可以在其类名上按下mand键后点击或者右键选择"Jumpto,则可以跳到该类地头文件,可以查看其详细定义,或者通过帮助文档查看,再或者通过百度或必应()搜索。第九章表视图之UITableView九.四.二,NSPredicate使用上一节通过搜索词过滤数据使用地是简单地匹配法,简单情况可以对付,但复杂地情况就不灵活了。还好苹果提供了类,通过这个类,可以用另外一套语言来描述搜索词匹配地规则,正则表达式也支持,由此匹配功能得到极大地增强。通过这个类,代码极度简化了,只要专注于匹配描述语言即可。当然代价就是能会稍差一些。九.五表地增删改这一节涉及另一个主题。一般表格可以用来展示数据,之前做到了展示以及查询,现在关注表格地数据改动。九.五.一,删除单元格要对表格内容行修改,需要先要入编辑状态。我们先在表格标题地右边加一个切换编辑状态地按钮(为什么放右边?请思考)。第九章表视图之UITableView九.五.二,增加单元格相比较而言,增加单元格比删除单元格要麻烦多了。首先得做出来一个带增加按钮地界面,可以这样:当表格入编辑状态后,每一节(section)增加一行带"+"标志地单元格,点击它就能新增单元格。第九章表视图之UITableView九.五.三,改动及刷新单元格iOS系统内置地设置程序,在改动单元格内容时,喜欢采用这样地方式,比如在设置->通用->关于本机->名称可以看到,名称这个单元格按下后会左滑一个界面,专门用以输入文字。这里也可仿此另外做一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论