相信你也和我一样有过这样的经历,如果在一个xib文件上要放置多个view的,在XCode里面去修改控件位置、设置属性都不是一个太舒服的体验,特别是多个view重叠的时候,nib文件看上起就完全没有美感可言了。当然,一个xib文件放太多的view并不是一种很好的设计模式,但是,我相信我们都希望Xcode能够做些改进。这回,apple就在iOS5下推出了Storyboard,给出了一个不错的解决方案。
首先,谈谈Storyboard的作用。
以往,我们通常是一个nib文件对应一个视图控制器,即应用的每一个场景通常有一个nib文件。Storyboard的最大作用就是把所有的nib文件组织起来,放在一个文件里面,交MainStoryBoard.storyboard,同时提供了在不同的视图控制器间切换的灵活方法。
这是,你可能会提出一个问题,它的性能怎么样,毕竟,应用在运行过程中一次加载所有的nib文件,对内存可能是一个很大的压力,很多情况下这甚至是不可能扼事。Take it easy, apple的工程师已经考虑的了,Xcode在实际编译时,仍然会把Storyboard里面的文件分开,程序在运行过程中会根据需要加载。同时,这一切对开发者来说都是透明的,我们只需要在Storyboard中做好设计就行了,其他不用管!
其次,是关于scene的概念,Storyboard中的每一个视图控制器都管理着一个scene(场景),对于iPhone应用来说,屏幕上只能显示一个scene,但对于iPad应用来说,则可以同时显示多个scene。
使用Storyboard的一个主要问题是如何在多个scene之间传递数据?当然方式有很多中,但Apple推荐的方式是这样的:
首先,谈谈Storyboard的作用。
以往,我们通常是一个nib文件对应一个视图控制器,即应用的每一个场景通常有一个nib文件。Storyboard的最大作用就是把所有的nib文件组织起来,放在一个文件里面,交MainStoryBoard.storyboard,同时提供了在不同的视图控制器间切换的灵活方法。
这是,你可能会提出一个问题,它的性能怎么样,毕竟,应用在运行过程中一次加载所有的nib文件,对内存可能是一个很大的压力,很多情况下这甚至是不可能扼事。Take it easy, apple的工程师已经考虑的了,Xcode在实际编译时,仍然会把Storyboard里面的文件分开,程序在运行过程中会根据需要加载。同时,这一切对开发者来说都是透明的,我们只需要在Storyboard中做好设计就行了,其他不用管!
其次,是关于scene的概念,Storyboard中的每一个视图控制器都管理着一个scene(场景),对于iPhone应用来说,屏幕上只能显示一个scene,但对于iPad应用来说,则可以同时显示多个scene。
使用Storyboard的一个主要问题是如何在多个scene之间传递数据?当然方式有很多中,但Apple推荐的方式是这样的:
假设controllerA有一个到controllerbB的segue,即controllerA->controllerB,可在controllerA中利用重写-[UIViewController prepareForSegue:sender:]的方式,将数据传递到controllerB中;如果要将数据从controllerB传回controllerA,则可以利用delegate的方式,即在controllerB中定义一个delegate,在controllerA中去实现这个delegate,从而实现controllerB->controllerA。可能有点饶,具体可以看看下面参考链接的第二篇文章,讲得很清楚,还有一个例子。
参考文章:http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1
http://www.raywenderlich.com/5191/beginning-storyboards-in-ios-5-part-2