ios学习--Storyboard

相信你也和我一样有过这样的经历,如果在一个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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值