Storyboard、Nib文件和代码来实现UI的利与弊
很清楚,这就是iOS里面两种可视化UI的方法。加上全部用代码来实现UI,总共有三种方法可以来实现。
我们先说一下全用代码来做,这个方法属于比较极端的程序员所推崇的,优点和缺点同样明显。
优点是可以实现所有的功能,用Nib文件和Storyboard可以实现的功能用代码都能实现,不能实现的一些功能,用代码也能实现;另外用代码方便多人共同开发项目,版本管理比较方便,Nib文件和Storyboard这点上就是致命伤了(Xcode5之后好了不少),最后一个就是这种开发方法很有高大上的感觉,可以让程序员自我迷醉。
缺点是代码不够直观,而且冗余很重。直接看代码你很难对一个View马上有个大体的印象,需要运行起来才能完整的看到全貌;至于代码冗余也很好理解,你看见View初始化之后都是一堆堆的设置frame,各种target-action的设置,也会觉得冗余的。
Nib文件是用InterfaceBuild来辅助做可视化的UI设计的文件,如果你用过微软的VisualBasic,VisualC++等等可视化开发语言的话,对这个概念应该不陌生。
用这个来开发UI同样让你欢喜让你忧,欢喜的是简单地UI确实比较方便,用鼠标拖拉一下,再加上一些设置就可以做出来了。忧的是这个功能实际上是用xml来存下View里面的内容,Xcode5之前打开文件,不加任何修改都能发现变化了,版本管理时满文件都是红色的,在多人修改到同一个文件时简直就是噩梦,Xcode5之后好了不少,但小组开发时少方便仍然是存在的问题。用Nib文件生成的UI,用代码都可以进行修正,我们往往会在Nib文件里面设置一部分,然后再代码中修正实现另外一部分,这样的编码方法容易起一些冲突,有时会让人很头晕。还有一点,这样生成的内容在不同的项目中复用是很难实现的。
Storyboard实在iOS5之后出现的概念,2011年的WWDC的Session309《Introducing Interface Builder Storyboarding》里面提出来的。这个东西的出现是为了弥补Nib文件仅仅针对一个View,没有针对整体应用流程的改进,同时它可以进一步节省代码。试用了一下,一个简单的例子,见下图:
个人的感觉嘛,怎么说呢,觉得一个人开发的简单项目中使用还是很不错的。应用的流程比较清晰,可以做到一目了然,View的切换是自动的,避免了用代码来做,可以进一步减少开发的工作量。缺点还是不适合多人共用,一个board多人一起维护的情形想想就觉得没那么简单,当然,有看到说应用并非只有一个board,每人可以用自己的board来开发。我承认,这样做会减少很多麻烦,但仍然感觉给版本管理带来了不小的麻烦(退化到极限,不就是Nib文件了么),另外,不管怎么说,代码的复用确实是变得困难了。
要说明的是,Storyboard和Nib文件并非是非此即彼的互斥关系,在用了Storyboard的应用中也可以用Nib文件,这对实现一些复杂的UI是有帮助的。当然,代码必不可少的需要增加一些。
我所从事的开发中,从来没用过纯用代码来实现UI,感觉这样做实现/调试/维护都不方便。很多项目由于有历史包袱,目前都是用Nib文件的方法在开发维护,新的应用感觉比较小巧,一个人能开发过来的,决定用Storyboard来实现,慢慢逐渐转向用Storyboard来开发。毕竟苹果对于这个工具持续在改进,也是未来力推的一个方向。
Storyboard、Nib文件和代码来实现UI的利与弊的更多相关文章
- 使用XML布局文件和Java代码混合控制UI界面
完全使用Java代码来控制UI界面不仅烦琐.而且不利于解耦:而完全利用XML布局文件来控制UI界面虽然方便.便捷,但难免有失灵活.因此有些时候,可能需要混合使用XML布局文件和代码来控制UI界面. 当 ...
- 【Xamarin挖墙脚系列:代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧(转)】
正愁如何选择构建项目中的视图呢,现在官方推荐画板 Storybord...但是好像 xib貌似更胜一筹.以前的老棒子总喜欢装吊,用代码写....用代码堆一个HTML页面不知道你们尝试过没有.等页面做出 ...
- 代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧
近期接触了几个刚入门的iOS学习者,他们之中存在一个普遍和困惑和疑问.就是应该怎样制作UI界面.iOS应用是非常重视用户体验的,能够说绝大多数的应用成功与否与交互设计以及UI是否美丽易用有着非常大的关 ...
- 关于代码手写UI,xib和StoryBoard
代码手写UI 这种方法经常被学院派的极客或者依赖多人合作的大型项目大规模使用.Geek们喜欢用代码构建UI,是因为代码是键盘敲出来的,这样可以做到不开IB,手不离开键盘就完成工作,可以专注于编码环境, ...
- nib文件的注册及加载
1,注册 [(UIView *)view registerNib:[UINib nibWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle ...
- 什么是Nib文件?(Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口)
Nib文件是一种特殊类型的资源文件,它用于保存iPhone OS或Mac OS X应用程序的用户接口.Nib文件是Interface Builder文档.通常您会使用Interface Builder ...
- 如何打开Nib文件
作者:ani_di 版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di # 如何打开Nib文件 有段时间没有灌水,今天分享一个小技巧. nib文件是Cocoa Ap ...
- 在代码中控制UI界面
虽然Android推荐使用XML布局文件来控制UI界面,但如果开发者愿意,Android允许开发者完全抛弃XML布局文件,完全在Java代码中控制UI界面. 实例:用编程的方式开发UI界面 packa ...
- 在Team Foundation Server (TFS)的代码库或配置库中查找文件或代码
[update 2017.2.11] 最新版本的TFS 2017已经增加了代码搜索功能,可以参考这个链接 https://blogs.msdn.microsoft.com/visualstudioal ...
随机推荐
- HTML实体符号
http://www.php100.com/html/program/html/2013/0903/1052.html
- 线程池之ThreadPool类与辅助线程 - <第二篇>
一.CLR线程池 管理线程开销最好的方式: 尽量少的创建线程并且能将线程反复利用(线程池初始化时没有线程,有程序请求线程则创建线程): 最好不要销毁而是挂起线程达到避免性能损失(线程池创建的线程完成任 ...
- Live555类结构
Medium live555几乎所有的处理单元都继承自Medium类:该类抽象了基本的接口,包括环境,task和媒体名和媒体查找函数(lookupByName)以及一些辅助函数.也包括返回当前的环境类 ...
- STL中的set容器的一点总结(转)
STL中的set容器的一点总结 1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂 ...
- 算法设计手冊(第2版)读书笔记, Springer - The Algorithm Design Manual, 2ed Steven S.Skiena 2008
The Algorithm Design Manual, 2ed 跳转至: 导航. 搜索 Springer - The Algorithm Design Manual, 2ed Steven S.Sk ...
- 【巧妙算法系列】【UVA 11384】 Help is needed for Dexter 正整数序列
Help is needed for Dexter Time Limit: 3 Second Dexter is tired of Dee Dee. So he decided to keep Dee ...
- ffmpeg调试相关知识点
1.若要调试FFMPEG,在编译时应当在configure时,加上 --enable-debug --disable-asm 注:在调试x264时就应该加上这两个配置选项,方能调试 2.make in ...
- ASP.NET通用权限验证组件实现
沙发(SF)通用权限验证组件 开篇 本篇介绍通用权限验证的实现代码思路,总共分为导入参数.解析XML.根据XML配置进行处理.返回结果. 代码架构图 1. 类介绍 1.SFWebPermissio ...
- SQLServer游标详解
一.游标概念 我们知道,关系数据库所有的关系运算其实是集合与集合的运算,它的输入是集合输出同样是集合,有时需要对结果集逐行进行处理,这时就需要用到游标.我们对游标的使用一本遵循“五步法”:声明游标—& ...
- 系统开发中按下Enter键登录系统
转载来自:http://www.jb51.net/article/54308.htm 系统开发中按下Enter键登录系统,即就是监听键盘,当按下Enter键后调用登录按钮的click()事件. JS方 ...