切换嵌入在NSContainerView

时间:2017-04-24 10:02:57

标签: swift macos cocoa

我有一个快速的项目,我根据连接到PC的设备数量以编程方式制作按钮(简而言之)。所有这些设备都要获得自己的指定视图,用户可以在其中调整此设备的设置。

到目前为止,我设法完成的是以编程方式放置按钮,并以编程方式为每个设备创建视图:

func createView() {
    let frame : NSRect = NSMakeRect(32, 32, 200, 200)
    let view : NSView = NSView(frame: frame)
    view.wantsLayer = true
    view.layer?.backgroundColor = NSColor.red.cgColor

    self.view = view
}

现在,我所做的是按下按钮时,该按钮对应于按钮:

@objc private func switchToView(sender : OpenDeviceButton) {
    let device : Device = sender.device!
    self.view.window?.contentView = device.view
}

但是,我打算做的不是改变一切,而是只改变一小部分。所以,我想到的是使用ContainerView并切换嵌入的内容,但是,我无法找到Apple文档中的任何内容来帮助我。

有没有办法将容器视图的内容换成另一个NSView

感谢。

1 个答案:

答案 0 :(得分:2)

您可以手动替换子视图:

let oldView = self.view.window?.contentView!.subviews[0]
let frame = oldView.frame
oldView.removeFromSuperview()
device.view.frame = frame
self.view.window?.contentView!.addSubview(device.view)