iOS之Swift基础知识iOS之MAC端开发iOS之Swift功能细节

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

上一篇 下一篇

猜你喜欢

热点阅读