- 浏览: 2964631 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (893)
- android (110)
- iphone (198)
- java (79)
- JavaScript手册-目录 (9)
- JavaScript手册-Array (19)
- JavaScript手册-Boolean (5)
- JavaScript手册-Date (50)
- JavaScript手册-Math (30)
- JavaScript手册-Number (14)
- JavaScript手册-RegExp (7)
- JavaScript手册-String (38)
- JavaScript手册-全局函数 (8)
- JavaScript实用脚本 (7)
- Others (21)
- java-jpcap (7)
- java-thread (1)
- ibm文章 (3)
- classloader (2)
- java-filter (2)
- 运行环境 (33)
- java-正则 (2)
- oracle (1)
- linux-shell (26)
- wap (1)
- sqlite (3)
- wow (1)
- jvm (1)
- git (5)
- unity3d (29)
- iap (2)
- mysql (23)
- nginx (14)
- tomcat (9)
- apache (2)
- php (1)
- ubuntu (40)
- rsa (1)
- golang (21)
- appstore (5)
- sftp (2)
- log4j (2)
- netty (18)
- 测试工具 (6)
- memcache (5)
- 设计模式 (1)
- centos (8)
- google_iab (5)
- iOS专题 (4)
- mac (10)
- 安装配置帮助手册 (2)
- im4java_graphicsmagick (5)
- inotify-tools (1)
- erlang (6)
- 微信支付 (1)
- redis (8)
- RabbitMQ (5)
最新评论
-
heng123:
Netty视频教程https://www.douban.com ...
netty4.0.23 初学的demo -
maotou1988:
使用Netty进行Android与Server端通信实现文字发 ...
netty4.0.23 初学的demo -
码革裹尸:
非常感谢,正好用上
android 呼入电话的监听(来电监听) -
rigou:
提示的/222.177.4.242 无法链接到ip地址,是什 ...
通过 itms:services://? 在线安装ipa ,跨过app-store -
duwanbo:
GridView与数据绑定
(转载)StoryBoard学习(2):优点
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!
发表评论
-
iOS程序运行生命周期
2015-11-10 09:05 964iOS程序运行生命周期 在文件AppDele ... -
iOS开发系列--IOS程序开发概览
2015-11-10 07:32 1180iOS开发系列--IOS程序开发概览 概览 ... -
2015年11月Xcode7.1(7B91b)打包发布苹果iOS应用指南
2015-11-09 18:29 108792015年11月Xcode7.1(7B91b) ... -
self.navigationController pushViewController执行不成功
2015-11-06 08:28 1611self.navigationControlle ... -
ios NSString format 保留小数点 float double
2015-11-05 17:37 2932ios NSString format 保留小数点 f ... -
自定义 URL Scheme 完全指南
2015-11-04 16:21 901自定义 URL Scheme 完全指南 转载 htt ... -
UIViewController生命周期方法viewDidLoad、viewWillAppear和viewDidAppear
2015-11-01 12:29 2951UIViewController生命周期 ... -
关于self.view.window与viewDidLoad、viewWillAppear、viewDidAppear
2015-11-01 09:36 2538关于self.view.window与viewD ... -
UIScreen学习记录
2015-10-31 08:18 1057UIScreen学习记录 转载自 ... -
使用NSTimer和CGAffineTransformMakeRotation实现旋转动画
2015-10-29 11:53 1825使用NSTimer和CGAffineTransform ... -
【原】iOSCoreAnimation动画系列教程(一):CABasicAnimation【包会】
2015-10-29 08:59 1024【原】iOSCoreAnimation动 ... -
iOS 在UILabel显示不同的字体和颜色
2015-10-27 08:07 1556在项目开发中,我们经常会遇到在这样一种情形:在一个UI ... -
UISlider滑动条的属性介绍以及于标签联合使用实时显示变动值
2015-10-27 08:06 1252UISlider滑动条的属性 ... -
关于使用DSLTableView下拉刷新数据遇到的问题
2015-10-23 21:17 940关于使用DSLTableView下 ... -
使用AdSupport.framework生成IDFA唯一标识符
2015-10-23 17:29 4707使用AdSupport.framework生成IDFA ... -
AppDelegate的详解
2015-10-22 17:51 678AppDelegate的详解 ... -
iOS开发问题集锦
2015-10-22 13:06 5251. Xcode开发连真机运行报错Please ver ... -
iOS 对象属性参数名定义的注意事项不能以alloc,new,copy,mutableCopy 作为开头命名
2015-10-21 15:41 1325property's synthesized g ... -
iOS-自定义的画圆或弧的UIView
2015-10-21 14:20 2653iOS-自定义的画圆或弧的UIView Cu ... -
iOS自定义的模态提示对话框
2015-10-20 14:27 6473iOS自定义的模态提示对话框 基本思路: 1.创建 ...
相关推荐
ios7下storyboard的简单使用
相比传统的nib文件,storyboard有很多优点: 1.使用storyboard,可以更好地理解应用中所有视图在概念上的概览以及它们之间的关系。掌控所有的视图变得很容易,因为所有的设计都是在一个文件中,而不是在很多单独的...
故事板样本[![CI 状态]( Linsin/storyboards-sample.svg?style=flat)]( Linsin/storyboards-sample )用法要运行示例项目, pod install克隆 repo,然后从 Example 目录运行pod install 。要求安装storyboards-sample...
UIScrollView-StoryBoard-AutoLayout 在 StoryBoard 和水平分页上使用 AutoLayout 的 UIScrollView 示例 滚动视图 gif
Storyboard是一项令人兴奋的功能,在... 如下图所示,这就是一个完整的应用的storyboard,接下来我们要学习如何通过这种方式创建应用。 现 http://www.raywenderlich.com/50308/storyboards-tutorial-in-ios-7-part-1 ...
storyboard-fountain, 以最简单的方式为剧本创建 Storyboard 更新:从底层开始的新版本: ...喷泉喷泉Storyboard 喷泉使得你可以以轻松地画出一个剧本,你可以以快速绘制。 快速可视化以测试场景
iOS引入storyboard后,写控件再没有这么简单了。从前只写控件就需要好几页的代码,现在只需要简单的拖拽就实现了。不过,如果是在合作开发中,如果两个人同时修改同一个storyboard文件时,就会引起代码冲突,因此...
用storyboard开发了一个小的tableview的demo,供大家学习storyboard使用。
iOS开发教程:Storyboard全解析-第一部分
用ControlStoryboardAction控制Storyboard的demo
wpf制作的数字滚动抽奖。主体部分由3个层次组成: (1)、单个数字(NumberItem.xaml) (2)、数字列(NumberPanel.xaml)...Storyboard2:从当前时刻的位置滚动到目标数字位置。 当开始滚动时,播放1,当停止滚动时,播放2。
WPF模拟幸运数字滚动效果源码 程序介绍: 主体部分由3个层次组成: (1)、单个数字(NumberItem.xaml)...Storyboard2:从当前时刻的位置滚动到目标数字位置。 当开始滚动时,播放1,当停止滚动时,播放2来自51ASPX1。
实现点击图片更换图片式样和text控件内容。帮助理解control和action。详细介绍见博客,代码比博客介绍多一些功能。http://blog.csdn.net/wangrunhuan/article/details/79215799
Crank Storyboard Suite帮助文档
Main storyboard file base name:第一启动的storyboard文件 注意:图形化的Info.plist文件上面的KEY不是真实的KEY,要想看真实的KEY得看Info.plist文件的源码 操作:Info.plist(选中后右键单击) -> Open As -> ...
Xcode---Storyboard用法详细,图文并茂,值得学习
Storyboard跳转和传值demo。
一、使用Storyboard进行跳转 1)纯Storybard界面操作 2)使用代码进行跳转 二、Storyboard界面传值 1)使用prepareForSegue方法进行跳转: 2)Storyboard Id跳转
storyboard的使用范例,关键掌握跳转,赋值,跳回;
UIScrollView autolayout on a storyboard 的一个demo