关闭

ios学习--Storyboard

1415人阅读 评论(0) 收藏 举报
相信你也和我一样有过这样的经历,如果在一个xib文件上要放置多个view的,在XCode里面去修改控件位置、设置属性都不是一个太舒服的体验,特别是多个view重叠的时候,nib文件看上起就完全没有美感可言了。当然,一个xib文件放太多的view并不是一种很好的设计模式,但是,我相信我们都希望Xcode能够做些改进。这回,apple就在iOS5下推出了Storyboard,给出了一个不错的解决方案。


首先,谈谈相信你也和我一样有过这样的经历,如果在一个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推荐的方式是这样的:


假设controllerA有一个到controllerbB的segue,即controllerA->controllerB,可在controllerA中利用重写-[UIViewController prepareForSegue:sender:]的方式,将数据传递到controllerB中;如果要将数据从controllerB传回controllerA,则可以利用delegate的方式,即在controllerB中定义一个delegate,在controllerA中去实现这个delegate,从而实现controllerB->controllerA。可能有点饶,具体可以看看下面参考链接的第二篇文章,讲得很清楚,还有一个例子。

的作用。


以往,我们通常是一个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。可能有点饶,具体可以看看下面参考链接的第二篇文章,讲得很清楚,还有一个例子。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:434007次
    • 积分:4417
    • 等级:
    • 排名:第6745名
    • 原创:20篇
    • 转载:75篇
    • 译文:2篇
    • 评论:71条
    文章分类
    最新评论