Swift3.0 开发macOS应用程序 (11): 如何在St
2017-03-21 本文已影响71人
MNode
在使用Storyboard布局的时候,想用一个控制器视图就将自己所需要的内容完全呈现出来比较困难,往往需要额外创建xib,然后将创建的xib的头文件添加进视图控制器中,再用代码加载进去。然而这样比较麻烦,我们完全可以在不重新创建新的xib的情况下,添加新视图备控制器想用的时候使用。还可以免去重新创建xib传值的麻烦。(macOS和iOS通用此方法)
拖拽需要的视图(比如NSView)到控制器First Responder旁边
QQ20170321-133643.png上面就会出现一个固定位置的视图,只可以调节大小和添加控件到视图里,位置无法移动。从树状结构中可以看到它是和ViewController在同一层级。
此层级的视图可以正常连接IBAction和IBOutlet,免去重新创建xib传值的麻烦。
QQ20170321-134411.png连接完线后,做一个如下效果的例子。
18.gif代码如下:
var isShow = Bool()
@IBOutlet var redView: NSView!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func showOrHide(_ sender: Any) {
isShow = !isShow
if isShow {
view.addSubview(redView)
redView.wantsLayer = true
//给redView添加约束
redViewAddConstraint()
}else{
redView.removeFromSuperview()
}
}
func redViewAddConstraint() {
redView.layer?.backgroundColor = NSColor.red.cgColor
redView.translatesAutoresizingMaskIntoConstraints = false
redView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
redView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
redView.widthAnchor.constraint(equalToConstant: 100).isActive = true
redView.heightAnchor.constraint(equalToConstant: 100).isActive = true
}
当然,你可以添加任意控件,而不只是NSView。
源码--》github