【发布时间】:2016-01-18 18:47:31
【问题描述】:
如果我像这样创建NSView 的子类:
class MyView: NSView {
var field = NSTextField(frame: NSMakeRect(0, 0, 35, 22))
func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
field.stringValue = "Hello World"
self.addSubview(field)
}
}
...然后我可以根据需要创建该视图的任意多个实例:
let view1 = MyView()
let view2 = MyView()
// ... more instances
...然后对他们做任何我想做的事:
view2.field.stringValue = "foo"
addSubview(view1)
addSubview(view2)
然而,实际上我正在尝试创建一个包含多个NSTextField 的视图。因此,弄清楚NSTextField 的每个框架应该是什么是相当乏味的,更不用说如果我想编辑其中任何一个,事情很快就会变得一团糟。这就是 Interface Builder 派上用场的地方。但我从未遇到过使用 Interface Builder 创建类声明的方法。我多次创建了NSView 的子类,将“自定义视图”拖到 nib 文件中,在视图中添加了一些内容,从“自定义视图”中的对象创建了一些 IBOutlets 到我的子类,更改了我的子类的“自定义视图”类,一切正常。但这不是可重新创建的(至少据我所知)。它只是我的类的一个特定实例,由 IB 初始化,仅此而已 - 只有一个实例。但我想要的是一种重现这种观点的方法。我希望能够在 IB 中设计一个“模板”,可以这么说,然后创建该模板的多个副本。必须有一个好的方法来做到这一点。也许是NSViewController?有什么想法吗?
【问题讨论】:
-
您可以根据需要多次反序列化 .xib 文件,并且每次都会得到新的、未共享的对象。查看
NSNib。
标签: swift interface-builder nsview