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 ...
随机推荐
- jQuery开发经验实例笔记
jQuery获取文件选择输入框的扩展名 var file=$("input[name='file']").val() var filename=file.replace(/.*(\ ...
- PYCURL ERROR 6 - “Couldn't resolve host 'mirrorlist.centos.org'”
在虚拟机上安装的CentOS,估计是网络配置问题,导致yum update和yum install之类的功能的用不了.出现标题上面的错误. ifdown [network_adapter] ifup ...
- git与svn的使用比较
先说下基础知识: git是本地会(维护)有个版本仓库. svn本地也会维护一个自己的信息(一般是目录结构和文件状态的信息),这里的文件状态一般是指:文件是已删除,还是已添加,还是被修改等等.一般是会有 ...
- LeeCode-Remove Element
Given an array and a value, remove all instances of that value in place and return the new length. T ...
- python之路-SQLAlchemy
SQLAchemy SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行S ...
- svn之——linux下清除svn的用户名和密码
问题:之前用的svn账号权限不够,需要使用别的账号,所以提出需求——怎么使用新的svn账号进行操作 方法一: linux下删除~/.subversion/auth即可清除之前的用户名和密码:rm -r ...
- Unity 使用实体类
故事的由来: 正在开发打飞机的游戏,遇到这样的数据结构,游戏有很多关卡-> 每个关卡有几波怪物->每一波里面有怪物和数量 [] 关卡 { []波{ {怪物,数量},{怪物,数量},{怪物, ...
- HTML标签的offset、client、 scroll和currentStyle属性
本文来自:http://www.cnblogs.com/quanhai/archive/2010/04/19/1715231.html offsetHeight = borderTopWidth + ...
- Riak VClock
Riak VClock 关于向量时钟的概念.在这里就多讲了,大家能够參照一下Dynamo的论文了解一下,向量时钟在分布式主要用于解决一致性性问题.能够和CRDTs一起看. 以下的源码是參照riak中的 ...
- VS2010+ICE3.5运行官方demo报错----std::bad_alloc
纠结了一晚上,在release版本下运行没问题,一到debug就报错,卡在 Ice::ObjectAdapterPtr adapter = ic->createObjectAdapterWith ...