您的位置:首页 - 教程 - IOS - 正文
iOS中的 SB和XIB的前世今生

今天给大家介绍一下Apple开发中三种几种常用的应用程序编写方式:纯代码创建、使用storyboard/XIB。我们都知道,纯代码编写模式适合大型项目大规模使用,利于版本管理、追踪改动以及代码合并代码重用性强,代码后期维护方便快捷。但是我们不能否认它开发周期长,代码结构复杂,自动布局AutoLayout困难等缺点,

 

一、Interface Builder介绍

 

1、概念

Interface Builder苹果平台下用于设计和测试用户界面的应用程序,简称IB。简单理解,IB就是提供可视化设计环境。

Interface Builder,是用于苹果公司 Mac OS X 操作系统的软件开发程序,Xcode 套件的一部分

 

Interface Builde :是可视化创建界面描述文件的工具,打开xib可以看到xml的文件结构

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对象是按照方进去的顺序排列的

 

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)可视化的效果,更直观的设计

(3)在版本管理上和纯代码的差异并不是很大,易读易维护。   

 

 

4、问题

 

(1)Xib无法进行逻辑判断。

 

(2)很难在运行时进行配置,Xib在使用时,经常要通过代码的补充,来完成功能实现。

 

(3)多人开发中通过代码修改Xib的属性,可能造成混乱和不可预计的问题。

 

(4)从程序员角度,可读性较差。不利于统一管理和维护。使用SVN等代码管理工具时,Xib会产生无用的记录,以及版本更新的缺陷。从Xcode5开始,苹果对这一方面问题进行了优化,比如在版本管理上,也可以很好的查找修改记录了。

 

(5) xib中的设置往往并非最终设置,UI设计会被代码所覆盖

      (如果选择xib,那么要尽量将xib的工作和代码的工作隔离开来:能够使用xib完成的内容就统一使用xib来做,而不要说三个Label其中两个在 xib设置了字体而另一个却在代码中完成。尽量仅保持必要的、较少的IBOutletIBAction会是一个好方法。)

 

6、几个和Xib相关的方法

 

(1)loadNibNamed:    owner:   options    加载Xib控件

 

(2)aweakFromNib 通过Xib加载控件,会调用关联类中的此方法

 

(3)initWithCoder    通过Xib加载控件,会调用关联类中的此方法

 

三、storyBoard

 

1、 简介

iOS5版本后,苹果公司推出Storyboard,目前新创建工程时默认自带Storyboard,可以说StoryBoard是未来的趋势.

 

 1.什么是Storyboard?

 

我们从字面可以理解为 故事板 Storyboard的是 ios5 的新特征 目的是代替历史悠久的xib

 

Storyboard 是多个xib文件集合的描述文件,也采用xml格式

如果要使用Storyboard特性,那么AppDelegate必须继承自UIResponder类, 之前则是继承自NSObject类的,而且必须有一个不是UIOutlet类的Window属性声明才可以 

注意点: 当我们需要更换Stoard 我们需要把infor.plist Main interface 里的东西 删除 否则会报错

 

2、特点

 

(1)提供页面间新的挑战方式:segue

 

(2)描述了若干窗体、组件、Auto Layout 约束等关键信息。

 

(3)默认storyBoard作为程序的主入口

 

(4)Auto Layout 跟 StoryBoard 的配合使用,可以大幅提高 UI 开发效率,并准确提供出各控件的位置和约束。

 

(5)storyBoard中是展现控制器之间的关系。

 

3、优势

 

(1)storyboard在IOS5引入,是xib集合的描述文件,本身也是xml格式;提供了nib 和 xib 的集中管理,更直观的展现出他们的关系。

 

(2)提高UI设计效率的同时,通过可视化界面,可以很清晰的反映出控制器之间的跳转关系。

 

(3)在storyBoard中可以提供简单的页面跳转,拖拽就可以设置成功。

 

(4)UI设计中可以实时直观的反映设计效果,由于代码量较少,所以,bug产生的几率也较低(代码实现UI需要大量代码)。

 

(6)代码量少,开发周期短

 

(7)是新建项目时候的默认配置,代表着苹果以后的方向和重心将倾向于可视化编程。

  

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)由于没有使用代码设计控件,所以重用问题不灵活。

 

四、xib 和 Storyboard 的区别

 

共同点 : 都用来描述软件的界面 都用Interface Buile工具编译

 

不同点 :(1)xib是轻量级 用来描述局部的UI界面;而Storyboard 是重量级 用来描述整个软件的多个界面 并且 能展示多个界面之间的跳转关系

       (2) storyboard是多个xib文件集合的描述文件,也采用xml格式。一个工程中可以有多个xib文件,一个xib文件对应着一个视图控制器和多个视图。而使用storyboard时,一个工程只需要一个主storyboard文件就可以了。因此,在包含多个视图控制器的情况下,采用storyboard管理比较方便,而且storyboard还可以描述界面之间的导航关系。

 

五、使用storyboard的注意点。

使用Storyboard需注意:

1、如果要使用Storyboard特性,那么AppDelegate必须继承自UIResponder类, 之前则是继承自NSObject类的,而且必须有一个不是UIOutlet类的Window属性声明才可以

2、StoryBoard专有的preview功能,以及AutoLayout的功能。

3、StoryBoard中已经不允许有单个view的存在

 

六、简述XIB和storyboard的使用方法。

 

xib使用过程:

1. 首先使用interface builder 新建一个uiview的.xib文件。

2. 向新建的uiview的.xib文件添加需要的控件。

3. 定义一个继承自uiview的派生类。将上面新建的xib文件的派生类改为新定义的继承自uiview的派生类。

4. 将在xib文件上添加的控件与继承自uiview的派生类建立连接IBOoutlet。

5. 在需要生成uiview的地方添加一下代码:

NSArray* nibView =  [[NSBundlemainBundle] loadNibNamed:@"xib文件名字"owner:nil options:nil];  

UIView * backupSearchView = [nibView lastObject];

 

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];

 

参考资料:http://news.cnblogs.com/n/124292/


评论: