nib农尖、xib析恋、storyboard三者的區(qū)別
三者都是Interface Builder(IB)界面開發(fā)中使用的文件格式,用于存儲圖形化開發(fā)信息盛卡。三種技術(shù)都可以簡化圖形界面開發(fā)助隧,減少代碼量,實現(xiàn)可視化開發(fā)(所見即所得)滑沧。
- nib: nib是NeXT interface builder的英文縮寫并村,以二進(jìn)制的形式存儲界面信息巍实,是IB3.0以前的文件格式。
- xib: xib是xml interface builder的英文縮寫哩牍,是IB3.0之后蘋果公司推出的新一代棚潦,以xml格式存儲界面信息,在最終執(zhí)行前膝昆,xib文件會被編譯為nib文件丸边。
- storyboard: 故事版文件,是蘋果最新推出的用于在界面開發(fā)中替代xib文件的一種新技術(shù)荚孵。本質(zhì)上是一個xml文件的集中管理區(qū)妹窖,不但可以描述xib單個界面的結(jié)構(gòu),還可以描述界面之間的跳轉(zhuǎn)及依賴關(guān)系处窥。
1. 從xib文件載入控件的方法
// 從xib文件載入
let vc = MyViewController(nibName: "MyViewController", bundle: nil)
// bundle為nil時嘱吗,系統(tǒng)會將所有路徑遍歷一次最終定位到名為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的可視化界面中需要對應(yīng)設(shè)置identifier)
// 復(fù)用cell
myTableView.dequeueReusableCell(withIdentifier: "my cell", for: indexPath) as! MyCell
// 使用復(fù)用cell可以在tableView數(shù)據(jù)量很大時提高性能,屏幕之外的cell不會占用內(nèi)存滔驾。
2.從storyboard中載入控件
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myViewController = storyboard.instantiateViewController(withIdentifier: "my vc")
// 在IB界面對應(yīng)的VC中要設(shè)置 storyboard ID字段
self.present(myViewController, animated: true, completion: nil)
self.navigationController?.pushViewController(myViewController, animated:true )
- 載入UIView
storyboard不能直脫離ViewController直接添加View
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者