Xcode4.2 改变之二 Storyboard
来源:互联网 发布:linux 双网卡默认网关 编辑:程序博客网 时间:2024/05/17 16:43
3. 新增特性——Storyboard
Storyboard是Xcode4.2新增的又一个特性,它将原有工程中的所有xib文件集成在一起,用拖曳的方式建立ViewController相关之间的跳转关系,使得整个程序的UI跳转逻辑清楚明了。简单地说,storyboard引入了2个概念:
scene:一个场景,由一个viewController和相关的xib表示。
segue:(英文原意为继续、持续)。在这是用于连接scenes,其有多种类型,包括:Push,Modal,Popover and more。
当然segue也负责传递数据和返回数据。
整个程序的界面转换就是在各个scene之间切换。界面跳转关系,比如按哪个键跳到哪个界面,是由segue来描述。segue也可以带数据,以便做数据传递。(也因此被说是抄袭Adobe的Flash)。
要点:必须有一个viewController是作为storyboard的初始界面的,及需要勾选上Initial Scene项。如下图:
StoryBoard相对于以前的NIB/XIB的优势:
- 能够减少很多与View相关的代码量。
- 能够使View和Controller进一步解耦。
- 能够优化程序的“页面流”,使程序的结构更清楚。
通常,NIB是和ViewController相关联的,很多时候ViewController都有其对应的NIB文件。该文件的作用就是描述用户界面以及初始化对象和界面元素对象。虽然这些都可以在代码中来实现,但为了高效编写程序代码,xCode给我们提供了IB来绘制界面。而StoryBoard的引入,则是进一步加强了这方面的功能,之前的NIB文件没有办法描述ViewController之间的跳转过渡,只能通过代码中调用类似-presentModalViewController:animated:或-pushViewController:animated:这个两个方法来实现。现在,在StoryBoard中引入了Segue这一概念,由Segue定义从一个ViewController到另一个ViewController的过渡。只需要像之前连接界面对象和Action Method那样将ViewController之间用合适的Segue连接起来即可,无需任何手写代码。即使是自定义Segue,也只需编写Segue的实现,而无需编写调用的代码,一切都由StoryBoard帮我们调用。
要准确用好StoryBoard机制,必须严格遵守MVC原则。要让View和Controller充分解耦;并且不同的Controller之间也是充分解耦。所以AppDelegate就应该是处理UIApplication的回调,而不应该负责用户界面的处理。更不应该直接把AppDelegate当ViewController用,乃至直接在UIWindow上绘制界面。虽然,这有可能简单明了,毕竟UIWindow也是UIView的子类。但我们还是要有优良的习惯:由ViewController来负责处理View才是正确之道。从近期苹果针对xCode的项目模板的变化上看也反映这种优化趋势:
在Xcode 4时,程序项目模板(如View-Based Application)开始鼓励使用UIWindow的rootViewController属性来指定第一屏的ViewController,以保证AppDelegate只专注于它应该做的事情。如今Xcode4.2引入StoryBoard后,AppDelegate就直接不管ViewController的事情了,第一屏使用的ViewController(即rootViewController)可以在StoryBoard中设置。
如何从NIB/XIB迁移到StoryBoard,有些什么改变?
- ViewController不需要NIB/XIB文件,连接Outlet和Action的操作都可以在StoryBoard上完成。
- 孤立View(独立于ViewController的View)是不能出现在StoryBoard里,所有View必须通过ViewController来管理。(这样,StoryBoard更像是Controller对象的容器,而不是View对象的容器,以前NIB/XIB倒显得可以视为View对象的容器)
- ViewController之间的过渡代码不需要了,用StoryBoard的Segue直接可视化连接不同的ViewController。
- UIWindow对象的作用被进一步淡化,在StoryBoard图上没有体现出AppDelegate对象——因为它本来就不应该来处理界面View的。
- 代码编写要严格遵守MVC设计模式,才能用好StoryBoard来高效开发程序。
实践中的问题:
XCode项目如果包含StoryBoard创建的,就无法在iOS 4.x的模拟器和iOS 4.x的真机上调试,运行,不报错,但是得到的结果只有黑屏。这应该是storyboard只有iOS5支持的原因吧。
- Xcode4.2 改变之二 Storyboard
- Xcode4.2 storyboard HelloWorld
- Xcode4.2 改变之三 可视化手势
- 关于xcode4.2的storyboard
- FlashBuilder4.7去掉预览和XCode4.2的StoryBoard
- iOS开发教程:Xcode4.2-Storyboard的简单使用
- Xcode4.2 不同之一 模板改变
- xcode4.2中storyboard实现一个简单的跳转 iOS 5的StoryBoard
- Xcode4.2开发入门之一些变化
- Xcode4.2开发入门之一些变化
- Xcode4.2开发入门之一些变化
- Xcode4.2开发入门之一些变化
- Storyboard学习要点(iOS5新特性学习之二)
- Xcode4.2+SVN代码管理研究(二)
- Xcode4.2+SVN代码管理研究(二)
- Xcode4.2+SVN代码管理研究(二)
- Xcode4.2+SVN代码管理研究(二)
- Xcode4.2+SVN代码管理研究(二)
- vim自动不全括号
- Xcode4.2 不同之一 模板改变
- android 导入工程时出错的解决办法
- vim编码问题
- & -2
- Xcode4.2 改变之二 Storyboard
- windows7下apache+php +mysql配置
- Xcode4.2 改变之三 可视化手势
- zoj 2876 Phone List
- Hibernate之one-to-one外键关联映射
- vs2010下编译安装boost
- Win7上安装VPN后连接时提示错误“Failed to open the IPSec driver”
- Mysql服务启动不了
- HDFS中的回收站