美文网首页君赏博客
怎么让继承的类直接使用XIB的布局试图

怎么让继承的类直接使用XIB的布局试图

作者: 君赏 | 来源:发表于2016-11-21 09:14 被阅读86次

怎么让继承的类直接使用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()
}

我们运行之后就可以显示出来了。

相关文章

  • 怎么让继承的类直接使用XIB的布局试图

    怎么让继承的类直接使用XIB的布局试图 最近做的一个小工具,一键替换key,就是为了解放双手,不然每次运行测试和正...

  • 使用Xib设置tableHeaderView 或 tableFo

    如果你经常使用IB布局,在XIB里使用tableView的时候,一定遇到过一个问题,怎么直接通过XIB来设置tab...

  • iOS控制器继承Xib布局

    在一个uiviewcontroller里面有xib布局,在其子类ViewController想使用父类Xib的控件...

  • 创建View的两种方式

    实例化一个UIView分两类,一类是UIView是使用xib制作的,一类是UIView纯手写的。 使用xib布局v...

  • 03UI开发-自定义控件

    我们所使用的控件都是直接或者间接的继承自View所有的布局都是直接或者间接的继承自ViewGroup 引入布局 虽...

  • 自定义view

    XIB 1.继承UIView创建View类,命名ViewA2.新建一个Xib,取名ViewA 3.使用ViewA ...

  • Swift IB开发之xib封装复用

    xib封装使用xib封装一个view,能够在其它xib、sb中使用目的:使用xib便利布局屏幕适配UI的优势 新建...

  • 代码布局

    xib 不是全能的,有的时候不能使用 xib 进行 UI 布局的时候,还是得使用代码布局。 代码布局有两个点要注意...

  • Java-----继承

    1、什么是继承? 继承就是让类与类之间产生关系(子父类关系),子类可以直接使用父类中的非私有成员。注意:子类不能使...

  • 多线程创建的三种方式对比

    继承Thread优点:可以直接使用Thread类中的方法,代码简单缺点:继承Thread类之后就不能继承其他的类实...

网友评论

    本文标题:怎么让继承的类直接使用XIB的布局试图

    本文链接:https://www.haomeiwen.com/subject/lexupttx.html