- 浏览: 711304 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
javenwong:
你好,我现在需要给一个Composite做圆角处理,不知道怎么 ...
SWT圆角窗口绘制 -
whao189:
回家了详细看看
Storyboard 解析 -
zhaoyubetter:
确实够麻烦
IOS 开发环境,证书和授权文件是什么? -
datawarehouse:
一直对这两个认为是一样的,现在学习了。
Oracle DB中的Schema -
yulanfeiyang:
顶,mark
下载音频,在IOS设备上播放
XCode 4.2 新功能 - Storyboard
最近開始比較有空在玩 XCode 4.2(iOS5 Beta3),赫然發現它多了個 Storyboard 的東東。Storyboard 這個東西一般來說是在做創意發想的時候,用來將自己的想的一些故事情節畫成像是連環漫畫一樣,想不到 Apple 把它用在這裡,真是佩服...
好吧,不廢話,先來說說這個 Storyboard 帶來什麼改變?
在這個版本前,我們在設計畫面的時候都是用 interface builder 產生一個 xib 檔,然後在 code 要出現這個畫面的時候可能是用這樣的方式:
[self.navigationController pushViewController:viewController animated:YES];
好,也許大家(包括我)已經習慣這樣的方式了,不過如果畫面一多的話,到處 push 來 pop 去的,誰知道畫面之間是怎麼串呢?可能只有 PG 最清楚吧?
現在 Storyboard 解決了這樣的問題,讓你先將故事情節畫出來,像這樣
[attach]3682[/attach]
畫面中間那個像是轉接頭的叫做 Segue,先把你要的畫面(View controller)拉到 Storyboard 內之後,比方說要將 A畫面->B畫面,那麼在 A 上面按住 control 鍵,然後拉到 B 畫面,並選擇 performSegueWithIdentifier:sender:,這樣兩個畫面就串起來了,當然你可以有很多路徑,比方說還可以有 A->C 或 A->D 之類的。
重點來了,那我在程式碼裡面要做什麼修改呢?
只要將原本的 pushViewController:animated: 的地方更改為以下這樣就可以了[code] [self.navigationController performSegueWithIdentifier:@"SegueLevel1" sender:self];[/code]其中 SegueLevel1 是我自己訂的轉接頭名稱,如果你有很多路徑的話,那麼就可以有多個 Segue。
這樣做法的好處是我可以很快的把故事情節描述出來,萬一客戶的畫面之間改來改去的,那麼我只要變更我的 Storyboard,只要 Segue identifier 不變,程式碼自然就不需要修改了。不過少了 xib 一時間倒是有點不習慣呢!
StoryBoard优势
StoryBoard是iOS 5的新特征,旨在代替历史悠久的NIB/XIB(其实StoryBoard还是基于NIB/XIB的,不过开发人员已经无需直接跟NIB打交道了)。目前关于StoryBoard的文档并不多,苹果的iOS 5的开发者文档里也仅有不多的介绍。所以,本文只是简单的谈谈本人对StoryBoard的一些粗浅的理解。(StoryBoard有时也叫做StoryBoarding,我不太注意这种细节,所以两个词经常会混用,如果你英语可以的话,能体会到两者的细微差别)
StoryBoarding机制比之NIB/XIB的的优势何在呢?个人认为,StoryBoard有以下几个优点:
能够减少很多跟View相关的代码;
能够使View和Controller进一步解耦;
能够优化程序的“页面流”,使程序的结构更清楚 ;
要理解这些优点,我们先要对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!
发表评论
-
iphone编程之UILabel 用法详解
2012-12-18 14:38 1405这段代码动态的创建了一个UILabel,并且把相关常用的属 ... -
IOS用正则验证手机号
2012-12-14 12:01 17208- (BOOL)validateMobile:(NSStr ... -
UITableView技巧之去除UITableViewCell边框
2012-12-14 10:42 3604有时候想在UITableViewCell中加内容,但又不想要c ... -
MAC MySQL Workbench执行批量更新和删除的时候错误解决
2012-10-25 11:21 4002处理MySQL更新表时ErrorCode:1175.You a ... -
Objective-C编码风格指南
2012-10-17 17:00 1227参考资料: • Apple: Coding Guideline ... -
autorelease对象具体什么时候释放?
2012-09-19 15:21 1041在项目中,会有一个默认的Autorelease pool,程序 ... -
Objective-C内存管理教程和原理剖析
2012-09-10 14:44 897此文涉及的内存管理是针对于继承于NSObject的Clas ... -
IOS开发内存释放小结
2012-09-03 17:34 5365内存释放是iphone开发过程中比较重的地方,所以在开辟内存后 ... -
为什么Android没有iOS那么顺滑
2012-08-29 14:38 903虽然很多Android手机的配 ... -
UITextView关闭键盘
2012-08-29 14:13 142101.如果你程序是有导航条的,可以在导航条上面加多一个Done的 ... -
Mac系统下查看鼠标所在点的RGB值--数码测色计
2012-08-29 14:05 1796苹果电脑的Mac OS X系统自带鼠标所在点颜色RGB值查看工 ... -
UIView你知道多少
2012-08-21 09:49 842曾经有人这么说过,在i ... -
Objective-C内存管理总结〜CC专版
2012-08-17 18:24 820iPhone系统中的Objective-C的内存管理机制是比较 ... -
iOS内存管理
2012-08-17 18:19 28391. 内总管理原则(引用计数) IOS的对象都继承于 ... -
IOS 获取当前系统时间的年、月、日、小时、分、秒
2012-08-14 17:33 6623NSCalendar *calendar = [[NSCa ... -
IOS判断是否为数字
2012-08-13 17:59 4909判断是否为整形: - (BOOL)isPureInt:(N ... -
self.用法
2012-08-09 14:55 848MyClass.h @interface MyClass ... -
#import与@class的区别
2012-08-08 17:13 9401.import会包含这个类的所有信息,包括实体变量和方法,而 ... -
iphone图标去掉光晕效果
2012-08-07 16:53 1159图片背景是透明的 如果想去掉光晕效果,就在info.plist ... -
去掉 App Store 内图标上部高亮效果的办法
2012-08-07 16:52 890苹果默认会在 App Store 里的应用图标上半部自 ...
相关推荐
iOS引入storyboard后,写控件再没有这么简单了。从前只写控件就需要好几页的代码,现在只需要简单的拖拽就实现了。不过,如果是在合作开发中,如果两个人同时修改同一个storyboard文件时,就会引起代码冲突,因此...
在C#中,Storyboard是一种动画工具,用于创建和控制时间序列的动画效果。它允许开发者在WPF(Windows Presentation Foundation)或UWP(Universal Windows Platform)应用中实现复杂的视觉动画,比如图片的旋转。本...
### Crank Storyboard Suite知识点详解 #### 一、Storyboard Suite概览 **1.1 引言** Crank Storyboard Suite是一款专为嵌入式设备设计的用户界面开发工具,它能够帮助开发者快速构建高性能、高响应性的图形界面...
在iOS应用开发中,Storyboard是Xcode提供的一种可视化布局工具,极大地简化了用户界面的设计和控制器之间的导航。这个“学习storyboard的demo”是针对iOS7版本,利用Xcode5进行开发的一个实例教程,旨在帮助开发者更...
iOS Storyboard 是苹果在iOS开发中引入的一种可视化界面构建工具,它允许开发者在一个单一的文件中设计和管理整个应用程序的用户界面。Storyboard替代了传统的.xib文件,简化了视图控制器间的导航流程,减少了手动...
在Windows Presentation Foundation (WPF) 中,故事板(Storyboard)是一种强大的动画工具,它允许开发者在用户界面上创建丰富的动态效果。本篇文章将深入探讨如何在WPF中创建动态故事板,结合 Todd Miranda 的演示...
在iOS应用开发中,Storyboard是一种强大的可视化布局工具,它允许开发者通过图形界面设计应用程序的用户界面,无需编写大量的代码。本篇文章将详细讲解如何利用Storyboard来创建并使用一个简单的UITableView示例。 ...
"storyboard国际化demo"就是一个展示如何利用Storyboard实现应用界面多语言支持的示例项目。在这个项目中,我们将深入探讨如何设置和管理Storyboards以支持多种语言。 首先,了解国际化的基本概念。国际化...
在iOS应用开发中,Storyboard是Xcode提供的一种可视化布局工具,它允许开发者通过图形界面来设计用户界面,并实现页面间的导航。本篇文章将详细讲解如何使用Storyboard进行界面设计、对象跳转、数据赋值以及返回操作...
在WPF应用开发中,Storyboard是一种强大的动画工具,它可以用于创建复杂的视觉效果和用户界面交互。Blend是微软提供的一款设计工具,它与Visual Studio结合,为WPF开发提供了丰富的设计和动画功能。在这个"Blend:用...
在iOS应用开发中,Storyboard是一种强大的工具,它允许开发者通过可视化的方式来组织和设计应用程序的用户界面。本教程将深入探讨Storyboard的基本概念、功能以及如何在实际项目中有效地使用它。我们将分为两部分...
Crank Storyboard Suite是一款强大的图形用户界面(GUI)开发工具,尤其在汽车仪表盘设计领域中广泛应用。这个软件允许开发者创建交互式、直观且高度定制化的车载信息系统,为驾驶者提供丰富的信息显示和控制功能。...
在iOS应用开发中,Storyboard是苹果提供的一种可视化布局工具,用于设计应用程序的用户界面。它允许开发者通过拖放UI元素并设置连接来构建屏幕间的导航流程。本篇将深入讲解如何在Storyboard中进行视图控制器之间的...
iOS Storyboard是苹果公司提供的一种可视化界面设计工具,它允许开发者通过拖拽的方式直观地设计iOS应用的用户界面。Storyboard将应用的所有视图控制器(View Controller)组织在一个可视化的流程图中,这样开发者...
Storyboard是一项令人兴奋的功能,在iOS5中首次推出,在开发app的界面时可以极大地节省时间。 如下图所示,这就是一个完整的应用的storyboard,接下来我们要学习如何通过这种方式创建应用。 现 ...
在iOS应用开发中,Storyboard是苹果提供的一种可视化界面设计工具,它允许开发者通过图形化的方式构建应用程序的用户界面,无需编写过多的代码。本篇将深入探讨Storyboard的基本概念、优势、组件以及如何进行实际...
在iOS应用开发中,Xcode是苹果官方推荐的集成开发环境(IDE),而Storyboard是Xcode中的一个重要组件,用于可视化地构建用户界面。本小例子旨在通过实际操作演示如何在Xcode中有效地利用Storyboard来设计iOS应用的...
在iOS应用开发中,`Storyboard`是苹果引入的一种可视化布局工具,它允许开发者在单一的图形界面中设计、组织和连接应用的多个视图控制器。本实例“ios_storyboard_helloworld”将指导我们如何利用`Storyboard`来创建...
在iOS应用开发中,Storyboard和XIB(XML Interface Builder)都是用于构建用户界面的重要工具。它们各有优势,可以根据项目的特定需求灵活使用。本教程将探讨如何简单地混合使用Storyboard和XIB,以实现更高效、更...
本教程将聚焦于如何使用Xcode 4.2及以上版本中的StoryBoard特性,来创建你的第一个iPhone应用程序。 StoryBoard是苹果引入的一种可视化界面构建工具,它允许开发者通过拖拽和配置UI元素来设计应用的屏幕布局,从而...