- Swift3.0 开发macOS应用程序 (11): 如何在St
- Swift3.0 开发macOS应用程序(6) NSStatus
- Swift3.0 开发macOS应用程序(5) NSAlert
- Swift3.0 开发macOS应用程序(2) NSCollec
- Swift3.0 开发macOS应用程序(3) NSTableV
- Swift3.0 开发macOS应用程序(4) NSArrayC
- Swift3.0 开发macOS应用程序 (8): NSAnim
- Swift3.0 开发macOS应用程序 (10): 添加Doc
- [Mac教程] 如何在 macOS 和 Windows 间通过局
- 初学者的macOS开发:第一部分
在使用Storyboard布局的时候,想用一个控制器视图就将自己所需要的内容完全呈现出来比较困难,往往需要额外创建xib,然后将创建的xib的头文件添加进视图控制器中,再用代码加载进去。然而这样比较麻烦,我们完全可以在不重新创建新的xib的情况下,添加新视图备控制器想用的时候使用。还可以免去重新创建xib传值的麻烦。(macOS和iOS通用此方法)
拖拽需要的视图(比如NSView)到控制器First Responder旁边
![](https://img.haomeiwen.com/i2105518/6c85262e6656cbbe.png)
上面就会出现一个固定位置的视图,只可以调节大小和添加控件到视图里,位置无法移动。从树状结构中可以看到它是和ViewController在同一层级。
此层级的视图可以正常连接IBAction和IBOutlet,免去重新创建xib传值的麻烦。
![](https://img.haomeiwen.com/i2105518/ead7b44968da45b2.png)
连接完线后,做一个如下效果的例子。
![](https://img.haomeiwen.com/i2105518/e33dfa4dc2689ae2.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
网友评论