nib、xib、storyboard三者的区别
三者都是Interface Builder(IB)界面开发中使用的文件格式,用于存储图形化开发信息。三种技术都可以简化图形界面开发,减少代码量,实现可视化开发(所见即所得)。
- nib: nib是NeXT interface builder的英文缩写,以二进制的形式存储界面信息,是IB3.0以前的文件格式。
- xib: xib是xml interface builder的英文缩写,是IB3.0之后苹果公司推出的新一代,以xml格式存储界面信息,在最终执行前,xib文件会被编译为nib文件。
- storyboard: 故事版文件,是苹果最新推出的用于在界面开发中替代xib文件的一种新技术。本质上是一个xml文件的集中管理区,不但可以描述xib单个界面的结构,还可以描述界面之间的跳转及依赖关系。
1. 从xib文件载入控件的方法
// 从xib文件载入
let vc = MyViewController(nibName: "MyViewController", bundle: nil)
// bundle为nil时,系统会将所有路径遍历一次最终定位到名为MyViewController的xib文件
let vc = MyViewController(nibName: "MyViewController", bundle: Bundle.main)
// 会在main路径下查找xib文件
let vc = MyViewController(nibName: "MyViewController", bundle: Bundle(for: MyViewController.self))
// 会在MyViewController类所在目录查找xib文件
// 将载入好的vc显示在屏幕上
present(vc, animated: true, completion: {
// do sth after the vc presented
})
// present 从下向上压入
self.navigationController?.pushViewController(vc, animated: true)
// push 从左向右压入
let view = Bundle.mian.loadNibNamed("MyView", owner: self, options: nil)?[0] as! MyView
// 注册cell
let nib = UINib(nibName: "MyCell", bundle: nil)
myTableView.register(nib, forCellReuseIdentifier: "my cell")
// 注册cell的reuse Identifier为“my cell” (nib的可视化界面中需要对应设置identifier)
// 复用cell
myTableView.dequeueReusableCell(withIdentifier: "my cell", for: indexPath) as! MyCell
// 使用复用cell可以在tableView数据量很大时提高性能,屏幕之外的cell不会占用内存。
2.从storyboard中载入控件
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myViewController = storyboard.instantiateViewController(withIdentifier: "my vc")
// 在IB界面对应的VC中要设置 storyboard ID字段
self.present(myViewController, animated: true, completion: nil)
self.navigationController?.pushViewController(myViewController, animated:true )
- 载入UIView
storyboard不能直脱离ViewController直接添加View