怎么讓繼承的類直接使用XIB的布局試圖
最近做的一個(gè)小工具逆趋,一鍵替換key盏阶,就是為了解放雙手,不然每次運(yùn)行測(cè)試和正式的版本都要手動(dòng)的替換key闻书。
自從2013年三月進(jìn)入一家外企之后名斟,就再也沒有用過xib.雖然現(xiàn)在蘋果已經(jīng)建議大家用Storyboard
但是一些地方還是要用到xib
.
自己幾乎所有的項(xiàng)目都是用的全代碼,但是平時(shí)demo和一些小工具還是用上可視化試圖和最新語言Swift
.
做到是一個(gè)mac程序魄眉,幾個(gè)界面基本上的功能按鈕都是一樣的砰盐。就封裝了一個(gè)類,用上了xib坑律。但是拖拽一個(gè)NSView
,繼承與我們剛才的自定義試圖岩梳,運(yùn)行發(fā)現(xiàn)出不來我們XIB界面。
我自己分析了一下原因,雖然我們讓XIB的類指向我們自己自定義試圖蒋腮,但是關(guān)聯(lián)不起來試圖淘捡。應(yīng)該沒有加載,我最初想到的解決在
override init(frame frameRect: NSRect)
required init?(coder: NSCoder)
這兩個(gè)方法里面讀取Nib
里面的試圖獲取到設(shè)置為自定義試圖的大小池摧。
最后對(duì)于Xib
這一塊不是很熟悉就沒走通焦除,后來經(jīng)過搜索,解決了我的問題作彤。大體上解決方法和我想的是一樣的膘魄。
下面是怎么實(shí)現(xiàn)的,看不了視頻的可以看我的竭讳。
新建一個(gè)OToolBarView
類繼承于NSView
.
class OToolBarView: NSView {
}
因?yàn)?code>Storyboard不允許直接拖拽NSView
创葡,允許我們拖拽NSViewController
。但是我們的是自定義試圖绢慢,用不上NSViewController
灿渴。就新建一個(gè)xib來做了。
名字命名為OToolBarView.xib
我們?cè)?code>xib里面關(guān)聯(lián)剛才創(chuàng)建的類胰舆。
我們?cè)O(shè)置里面的View關(guān)聯(lián)為OToolBarView
的一個(gè)屬性
@IBOutlet var view: OToolBarView!
新增一個(gè)方法來加載自定義試圖
func loadNibView() {
Bundle.main.loadNibNamed("OToolBarView", owner: self, topLevelObjects: nil)
self.view.frame = self.bounds
self.addSubview(self.view)
}
我有點(diǎn)不理解為什么執(zhí)行了Bundle.main.loadNibNamed("OToolBarView", owner: self, topLevelObjects: nil)
這個(gè)方法之前設(shè)置的屬性View
就存在值了缚窿,有點(diǎn)不理解。
還有這個(gè)類型AutoreleasingUnsafeMutablePointer
應(yīng)該像Object-C
的自定義釋放的類型误续。以后研究一下這個(gè)類型扫茅。
我們?cè)谖覀儽匾牡膬蓚€(gè)初始化方法里面進(jìn)行調(diào)用loadNibView
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
self.loadNibView()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
self.loadNibView()
}
我們運(yùn)行之后就可以顯示出來了。