XIB
2016年04月25日⁄iOS开发经验⁄ 共 3625字 ⁄ 字号小中大⁄评论关闭
XIB
Storyboard 和 xib
1.1 Storyboard故事板 Storyboard的是 ios5 的新特征 目的是代替历史悠久的xib.Storyboard 是多个xib文件集合的描述文件,也采用xml格式.如果要使用Storyboard特性,那么AppDelegate必须继承自UIResponder类, 之前则是继承自NSObject类的,而且必须有一个不是UIOutlet类的Window属性声明才可以
>> 注意点: 当我们需要更换Stoard 我们需要把infor.plist Main interface 里的东西 删除 否则会报错
>>优点 : stroryboard 可以帮助我们解决很多重复的跳转方法 可以节省很多时间.代码量少 开发周期短.可以看到每个ViewController的布局样式 也可以明确地知道各个ViewController的跳转关系
>>缺点 :团队开发不便
1.2 storyboard 的使用
// 1.创建窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// 2.创建控制器[storyboard故事板]
// 2.1 先加载故事板文件
UIStoryboard *boss = [UIStoryboard storyboardWithName:@"CZBoss" bundle:nil];
// 2.2 实例化初始化控制器[带箭头]
//UIViewController *vc = [boss instantiateInitialViewController];
//根据表示符,实例化控制器
UIViewController *vc = [boss instantiateViewControllerWithIdentifier:@"blue"];
// 3.设置窗口的根控制器
self.window.rootViewController = vc;
// 4.把窗口作为主窗口并可见
[self.window makeKeyAndVisible];
2 Xib
> >Xcode.3.0 之前 Interface Build 创建的文件是二进制nib nib代表Next interface Builder 因为nib是二进制不好管理 也不方便版本控制 xcode.3.0 之后 interface builder 使用了一种新的文件格式xib xib的意思是XML interface builder, xib 使用了XML 在工程编译的时候在转换成nib
>> xcode 4.0 之前 interface Builde 是一个独立软件, 而Xcode 4.0 是个大版本 界面被重新设计 interface Builder 被直接集成到xcode
注意点: 当我们用xib 会遇到 xib 添加到控制器view 中有时程序会崩溃
错误提示: unrecognized selector sent to instance 0x7ffae1c1b680'
这时我们应注意xib里控件有几个 ,我们加载xib 会以数组的形式加载 xib对象是按照放进去的顺序排列的
>> Xib 的优点 :
> 开发速度快
> 在版本管理上和纯代码的差异并不是很大 易读易维护
缺点 :
xib中设置往往并非最终设置 UI设计会被代码所覆盖
(如果选择xib,那么要尽量将xib的工作和代码的工作隔离开来:能够使用xib完成的内容就统一使用xib 来做 而不要说三个label其中俩个在xib设置字体 而另一个却在代码设置 尽量仅保持必要的 较少的IBOutelet 和IBAction)
3 xib 和 Storyboard 的区别
xib 是轻量级的
Storyboard 是重量级的
共同点 : 都用来描述软件的界面 都用Interface Buile工具编译
不同点 :
xib是轻量级 用来描述局部的UI界面
Storyboard 是重量级 用来描述整个软件的多个界面 并且 能展示多个界面之间的跳转关系
4 补充:
一、Interface Builder介绍
1、概念
Interface Builder苹果平台下用于设计和测试用户界面的应用程序,简称IB。简单理解,IB就是提供可视化设计环境。
2、作用及特点
IB给用户提供了可视化的操作界面,可以很方便并且直观的设计出用户界面元素。IB提供的拖放面板,使用拖拽就可以方便的构建出UI界面。使用IB是可选的,因为所有控件都可以使用代码来实现。
3、集成
Interface Builder工具是在iPhone SDK中提供的,应用于Mac OC 和iOS应用开发,从Xcode4开始,集成到了其中(之前是独立的软件)。
4、Nib元素
(1) Nib文件是保存由Interface Builder创建的对象及对象间关系的一种资源文档,Nib 是 NeXT Interface Builder的缩写。
(2)早期,IB使用Nib文件存储控件资源,Nib本身是二进制文件。
5、Xib的出现
(1)自从Xcode 3.0 开始,苹果提供Xib文件构建UI元素,本质是XML文本文件,可以很方便的编辑。同时Xib可以编译为Nib。
(2)Nib 和 Xib都是 Interface Builder 的图形界面设计文档。
二、xib介绍
1、简介
(1)IB和xib是从iOS SDK初次面世开始就是捆绑在开发者工具套装内的内容了(独立),而到了Xcode 4之后更被直接集成到了Xcode中成为了IDE的一部分。
(2)Xib是XML格式的文件。
(3)UIViewController生命周期函数loadView之前,Xib会转化成可执行的nib文件
2、使用
(1)通过xib加载控件
<1>loadNibNamed 方法
(2)通过xib加载控制器
<1>initWithNibName: bundle:方法 (如果xib和控制器名字相同或近似,可以不用实例化)
<2>设置xib的身份检查器中的关联
<3>设置File's Owner ,拖动到View上
3、优势
(1)相比纯代码,大大缩短了UI界面搭建的时间,提高了开发效率。
(2)可视化的效果,更直观的设计。
4、问题
(1)Xib无法进行逻辑判断。
(2)很难在运行时进行配置,Xib在使用时,经常要通过代码的补充,来完成功能实现。
(3)多人开发中通过代码修改Xib的属性,可能造成混乱和不可预计的问题。
(4)从程序员角度,可读性较差。不利于统一管理和维护。使用SVN等代码管理工具时,Xib会产生无用的记录,以及版本更新的缺陷。从Xcode5开始,苹果对这一方面问题进行了优化,比如在版本管理上,也可以很好的查找修改记录了。
5、几个和Xib相关的方法
(1)loadNibNamed: owner: options 加载Xib控件
(2)aweakFromNib 通过Xib加载控件,会调用关联类中的此方法
(3)initWithCoder 通过Xib加载控件,会调用关联类中的此方法
三、storyBoard
1、简介
(1)storyboard在IOS5引入,是xib集合的描述文件,本身也是xml格式。
(2)提供了nib 和 xib 的集中管理,更直观的展现出他们的关系。
(3)通过可视化界面,设计UI的方式。
2、特点
(1)提供页面间新的挑战方式:segue
(2)描述了若干窗体、组件、Auto Layout 约束等关键信息。
(3)默认storyBoard作为程序的主入口
(4)Auto Layout 跟 StoryBoard 的配合使用,可以大幅提高 UI 开发效率,并准确提供出各控件的位置和约束。
(5)storyBoard中是展现控制器之间的关系。
3、优势
(1)提高UI设计效率的同时,可以很清晰的反映出控制器之间的跳转关系。
(2)在storyBoard中可以提供简单的页面跳转,拖拽就可以设置成功。
(3)UI设计中可以实时直观的反映设计效果,由于代码量较少,所以,bug产生的几率也较低(代码实现UI需要大量代码)。
4、使用
(1)通过storyBoard加载控制器
<1> 创建UIStoryboard 对象: storyboardWithName:
<2> 通过storyBoard对象创建
instantiateInitialViewController;
instantiateViewControllerWithIdentifier;
(2)通过storyBoard加载视图,
<1> 在Prototype cells 中设置样式,和reusedID,可以实现cell重用。
<2> collection中的item注册,也可以通过Prototype cells
5、问题
(1)存在Xib设计中相同的一些问题,比如维护的不方便,多人开发的不便利,没有逻辑判断等等。
(2)最大问题就是多人协作开发,UI控件都在一个storyBoard文件中。
(3)因为是多个Xib,多以会更大一些,加载会慢一些。
(4)由于没有使用代码设计控件,所以重用问题不灵活。