很久没有使用 Xib 进行开发了,解决使用 Xib 加载竟然不会了

怎么让继承的类直接使用XIB的布局试图
最近做的一个小工具,一键替换key,就是为了解放双手,不然每次运行测试和正式的版本都要手动的替换key。
自从2013年三月进入一家外企之后,就再也没有用过xib.虽然现在苹果已经建议大家用 Storyboard
但是一些地方还是要用到 xib
.
自己几乎所有的项目都是用的全代码,但是平时demo和一些小工具还是用上可视化试图和最新语言 Swift
.
做到是一个mac程序,几个界面基本上的功能按钮都是一样的。就封装了一个类,用上了xib。但是拖拽一个 NSView
,继承与我们刚才的自定义试图,运行发现出不来我们XIB界面。
我自己分析了一下原因,虽然我们让XIB的类指向我们自己自定义试图,但是关联不起来试图。应该没有加载,我最初想到的解决在
override init(frame frameRect: NSRect) required init?(coder: NSCoder)
这两个方法里面读取 Nib
里面的试图获取到设置为自定义试图的大小。
最后对于 Xib
这一块不是很熟悉就没走通,后来经过搜索,解决了我的问题。大体上解决方法和我想的是一样的。
解决问题的视频地址https://www.youtube.com/watch?v=Wx7qk2oOV48
下面是怎么实现的,看不了视频的可以看我的。
新建一个 OToolBarView
类继承于 NSView
.
class OToolBarView: NSView { }
因为 Storyboard
不允许直接拖拽 NSView
,允许我们拖拽 NSViewController
。但是我们的是自定义试图,用不上 NSViewController
。就新建一个xib来做了。
名字命名为 OToolBarView.xib
我们在 xib
里面关联刚才创建的类。
我们设置里面的View关联为 OToolBarView
的一个属性
@IBOutlet var view: OToolBarView!
新增一个方法来加载自定义试图
func loadNibView() { Bundle.main.loadNibNamed("OToolBarView", owner: self, topLevelObjects: nil) self.view.frame = self.bounds self.addSubview(self.view) }
我有点不理解为什么执行了 Bundle.main.loadNibNamed("OToolBarView", owner: self, topLevelObjects: nil)
这个方法之前设置的属性 View
就存在值了,有点不理解。
还有这个类型 AutoreleasingUnsafeMutablePointer
应该像 Object-C
的自定义释放的类型。以后研究一下这个类型。
我们在我们必要的的两个初始化方法里面进行调用 loadNibView
override init(frame frameRect: NSRect) { super.init(frame: frameRect) self.loadNibView() } required init?(coder: NSCoder) { super.init(coder: coder) self.loadNibView() }
我们运行之后就可以显示出来了。
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。