`

浅谈iOS 5的StoryBoard

    博客分类:
  • ios
 
阅读更多

 

StoryBoard是iOS 5的新特征,旨在代替历史悠久的NIB/XIB(其实StoryBoard还是基于NIB/XIB的,不过开发人员已经无需直接跟NIB打交道了)。目前关于StoryBoard的文档并不多,苹果的iOS 5的开发者文档里也仅有不多的介绍。所以,本文只是简单的谈谈本人对StoryBoard的一些粗浅的理解。(StoryBoard有时也叫做StoryBoarding,我不太注意这种细节,所以两个词经常会混用,如果你英语可以的话,能体会到两者的细微差别)


StoryBoarding机制比之NIB/XIB的的优势何在呢?个人认为,StoryBoard有以下几个优点:

  1. 能够减少很多跟View相关的代码;
  2. 能够使View和Controller进一步解耦;
  3. 能够优化程序的“页面流”,使程序的结构更清楚 ;

要理解这些优点,我们先要对NIB有一个基本的认识。通常,NIB是和ViewController相关联的,很多ViewController都有对应的NIB文件。NIB文件的作用是描述用户界面以及初始化对象和界面元素对象。其实开发者在NIB里描述的界面和初始化的对象都能够在代码中实现;之所以用Interface Builder来绘制界面,是为了减少那些设置界面属性的无聊和重复的代码,让开发人员能够集中精力做程序的功能。

而StoryBoard的出现,则是进一步加强了这方面的功能;NIB文件是没有办法描述从一个ViewController到另一个ViewController的过渡的。这种过渡只能靠手写代码来实现。相信很多人都会经常用到 -presentModalViewController:animated:以及-pushViewController:animated:这两个方法。这种代码在Storyboarding里将成为历史;取而代之的是Segue。Segue定义了从一个ViewController到另一个ViewController的过渡。在Storyboard里,我们只需要像连接界面对象和Action Method那样把ViewController之间用Segue连接起来就可以了,不再需要手写代码了。即便你像自定义Segue,你也只需写Segue的实现,而无需编写调用的代码,StoryBoard会帮你调用的。这就是上面所说的第一个优点。


要用好Storyboarding机制,那么必须严格遵守MVC原则。要让View和Controller充分解耦;并且不同的Controller之间也要充分解耦。否则,程序的业务逻辑就会乱成一团,很难理解,维护和除虫(Debug)。

举个例子来说:在过去,特别是初学Cocoa Touch开发的时候,很多人都喜欢直接把AppDelegate当ViewController用,直接在AppDelegate和MainMenu.xib之间交互。应该说,这是一个非常不好的习惯AppDelegate的作用很简单,就是处理UIApplication的回调,而不应该负责用户界面的处理。很多iOS教程为了省事,都直接把AppDelegate当ViewController用,甚至直接举例在UIWindow上绘制界面。虽然,作为教程这么做很简单明了,因为UIWindow也是UIView的子类,但是这却不是一种优良的实践。因为由ViewController来负责处理View才是正确的做法

近一段时间,苹果的项目模版经常发生改变,特别是自从Xcode 4发布之后,程序模版(如,View Based Application)开始鼓励使用UIWindow的rootViewController属性来指定第一屏的ViewController,以保证AppDelegate专注于它应该做的事情。而引入StoryBoard之后,AppDelegate已经不管ViewController的事情了 ;第一屏所使用的ViewController(也就是rootViewController)可以在StoryBoard中设置。这样,程序的入口点就能从StoryBoard的“设计图”上一目了然了。这是第二个优点。




至于第三个优点,就是StoryBoard的“设计图”了。StoryBoard能够包含一个程序所有的ViewController以及它们之间的连接。因此,StoryBoard甚至可以作为程序的“设计图”来用了。理想情况下,在程序开发接近尾声的时候,我们只需对比StoryBoard的“流程”和最初程序的设计“流程”,就知道程序有没有“走样”了。


说完了优点,我们来看看从NIB/XIB到StoryBoard的迁移,我们需要有哪些理解和实践上的改变呢?

  • 首先,自然是(在做程序开发的时候)ViewController不再需要NIB/XIB了(虽然在后台还是用的NIB)。以前在NIB/XIB上做的连接Outlet和Action的操作都可以在StoryBoard上完成了;
  • 第二,孤儿View(独立于ViewController的View)是不能出现在StoryBoard里的,View必须通过ViewController来管理(StoryBoard更像是Controller对象的容器,而不是View对象的容器,NIB/XIB可以作为View对象的容器);
  • 第三,ViewController之间的过渡代码已经是历史了,用StoryBoard可以直接可视化地连接不同的ViewController;
  • 第四,UIWindow对象的作用被进一步淡化,甚至可以这么说:其实很多程序根本无需用到UIWindow对象。AppDelegate也不再被鼓励(也不能)用来做ViewController--你甚至无法在Interface Builder的StoryBoard图上找到AppDelegate对象--因为它本来就不应该用来处理界面(View)的。
  • 最后,写优质的代码,严格遵守MVC设计模式,这样不仅能够让你用好StoryBoard,也能帮助你理解StoryBoard的原理。

StoryBoard是非常好的鼓励MVC和代码解耦的手段,能够让开发人员写出更加容易维护的代码。不过对于初学者来说,确实是个对理解力的小挑战。不过作为初学者也不用担心,一旦突破了理解障碍,你就会发现StoryBoard也非常好用--就像最初理解NIB/XIB时,Outlet和Action“拉线”来“拉线”去,看起来也很神奇;理解之后,发现原来“拉线”神马的也没那么神秘。

好了,絮絮叨叨的啰嗦了这么多无聊的文字,相信你也看累了。如果你依然对我写的东西不知所云的话,你可以稍稍研究一下Xcode 4.2的几个内建模版,然后和使用XIB的模版对比一下,看看苹果是怎么用StoryBoard的,能够很好的帮助你理解Storyboarding机制。当然,千万不要忘记亲自动手用一用StoryBoard!

Happy Coding!

【更新】

在看了WWDC 2011 的session video:UIViewController Containment这个视频之后,我感觉,正确的处理UIViewController之间的层级关系对于Storyboard来说非常重要,两者能够相得益彰。而window.rootViewController的使用,虽然也是鼓励用户不要把AppDelegateViewController用,更重要的是鼓励用户使用正确的UIViewController层级关系。

 

  • 大小: 48 KB
  • 大小: 35.7 KB
  • 大小: 88 KB
  • 大小: 47.6 KB
分享到:
评论

相关推荐

    ios_storyboard_helloworld实例

    在iOS应用开发中,`Storyboard`是苹果引入的一种可视化布局工具,它允许开发者在单一的图形界面中设计、组织和连接应用的多个视图控制器。本实例“ios_storyboard_helloworld”将指导我们如何利用`Storyboard`来创建...

    [IOS] Storyboard全解析-第一部分

    在iOS应用开发中,Storyboard是苹果提供的一种可视化界面设计工具,它允许开发者通过图形化的方式构建应用程序的用户界面,无需编写过多的代码。本篇将深入探讨Storyboard的基本概念、优势、组件以及如何进行实际...

    ios-storyboard,使用IBOutletCollection.zip

    在iOS开发中,Storyboard是Apple推荐的用户界面设计工具,它可以直观地构建应用程序的界面,并通过segue连接不同的视图控制器,实现页面间的跳转。在这个名为"ios-storyboard,使用IBOutletCollection.zip"的压缩包中...

    IOS Storyboard 入门源码

    Storyboard是一项令人兴奋的功能,在iOS5中首次推出,在开发app的界面时可以极大地节省时间。 如下图所示,这就是一个完整的应用的storyboard,接下来我们要学习如何通过这种方式创建应用。 现 ...

    IOS—Storyboard创建混合项目

    在iOS开发中,Storyboard是Apple引入的一个强大的可视化布局工具,自iOS 5开始引入,它极大地简化了用户界面的设计和导航流程。Storyboard允许开发者在一个单一的文件中设计整个应用程序的界面,而无需编写大量的...

    IOS StoryBoard传递参数

    在iOS应用开发中,StoryBoard是一种可视化布局工具,它允许开发者通过拖拽和配置UI元素来构建用户界面。然而,创建交互式应用时,我们常常需要在不同的ViewController之间传递数据。本文将详细介绍如何在iOS ...

    ios淘宝storyboard项目源码

    本项目“ios淘宝storyboard项目源码”是一个基于Storyboard实现的模仿淘宝客户端的应用程序,它展示了如何利用Storyboards高效地搭建类似淘宝的复杂UI布局。 1. Storyboard基础: Storyboard是一个单一的XML文件,...

    ios_storyboard_imagepicker

    在iOS应用开发中,`storyboard`是一种直观的可视化布局工具,用于构建用户界面,而`imagepicker`则涉及到图片选择功能。这个项目"ios_storyboard_imagepicker"显然是一个使用Objective-C编写的iOS应用程序,它利用...

    ios5_storyboard_springbaord

    在iOS 5中,苹果引入了Storyboard这一强大的界面设计工具,它允许开发者在一个统一的环境中设计和管理应用的UI。"ios5_storyboard_springbaord"项目显然是一个模仿Springboard功能的实例,旨在帮助开发者理解和实现...

    ios5-storyboard iphone springboard

    在iOS开发中,"ios5-storyboard iphone springboard"是一个重要的概念,涉及到Objective-C编程语言、iOS5版本以及Storyboard的设计工具。Springboard是iPhone主屏幕的核心组件,它负责管理应用程序的图标布局,以及...

    【一步一步学IOS5 】 Storyboard 创建Tab Bar控制器和Web视图

    在本教程“一步一步学iOS5”中,我们将深入探讨如何利用Storyboard创建一个Tab Bar控制器以及集成Web视图。这个过程对于任何希望创建具有多页面导航和网络内容展示的iOS应用来说都是至关重要的。 首先,让我们理解...

    学习storyboard的demo

    这个“学习storyboard的demo”是针对iOS7版本,利用Xcode5进行开发的一个实例教程,旨在帮助开发者更好地理解和运用Storyboard。在这个项目中,我们将深入探讨Storyboard的核心概念、特点以及如何在实际开发中有效...

    ios 实例 Storyboard

    ios 5.1 Storyboard 多视图切换包括实现自定义协议delegate等

    ios Storyboard全面解析

    iOS Storyboard 是苹果在iOS开发中引入的一种可视化界面构建工具,它允许开发者在一个单一的文件中设计和管理整个应用程序的用户界面。Storyboard替代了传统的.xib文件,简化了视图控制器间的导航流程,减少了手动...

    ios-用storyboard自定义View.zip

    在iOS开发中,Storyboard是一种强大的工具,用于设计和组织应用程序的用户界面。它允许开发者以可视化的方式构建UI,而无需编写大量的布局代码。本压缩包文件"ios-用storyboard自定义View.zip"包含了如何使用...

    ios-storyboard微信版框架搭建.zip

    在iOS开发中,Storyboard是一种非常重要的界面设计工具,它允许开发者通过可视化的方式来组织和构建应用程序的用户界面。在这个“ios-storyboard微信版框架搭建.zip”项目中,开发者使用Storyboard来模仿微信的应用...

    多个storyboard合作开发demo

    iOS引入storyboard后,写控件再没有这么简单了。从前只写控件就需要好几页的代码,现在只需要简单的拖拽就实现了。不过,如果是在合作开发中,如果两个人同时修改同一个storyboard文件时,就会引起代码冲突,因此...

    ios-将Storyboard生成约束代码(迭代).zip

    Storyboard和Xib文件生成纯手写代码,只需要将文件放在桌面,就会识别到,点击对应的生成代码到桌面,就会生成对应的Masonry纯手写代码,如果需要给控件,控制器等等设置名字,就在CustomClass里面设置就好了,代码会生成在...

    iOS Storyboard全解析.pdf

    iOS Storyboard是苹果公司提供的一种可视化界面设计工具,它允许开发者通过拖拽的方式直观地设计iOS应用的用户界面。Storyboard将应用的所有视图控制器(View Controller)组织在一个可视化的流程图中,这样开发者...

    IOS使用Launch Screen.storyboard制作广告启动界面

    IOS制作启动广告图,兼容LaunchImage加载启动图和LaunchScreen启动,详细讲解可以查看博客:http://blog.csdn.net/wx_jin/article/details/50617041

Global site tag (gtag.js) - Google Analytics