Swift:在 Container View/NSView 内的 NSViewController 之间切换

标签 swift storyboard segue nsview nsviewcontroller

我想实现一个非常简单的任务 - 通过按下按钮来更改容器 View 的 ViewController:

enter image description here

在我的示例中,ViewController1 使用 Interface Builder 嵌入到容器 View 中。通过按按钮 ViewController2 我想将 View 更改为第二个 ViewController。

我很困惑,因为如果我创建一个 Outlet,Container View 本身似乎是一个 NSView,并且据我所知 NSView 不能包含 VC。非常感谢您的帮助!

最佳答案

请注意,为了使其正常工作,您必须将 Storyboard标识符添加到 View Controller 中,方法是转到 Storyboard,然后在右侧 Pane 中选择“身份检查器”,然后输入 Storyboard IDIdentity 子类别中。

然后 ViewController 的实现将实现您正在寻找的内容。

import Cocoa

class ViewController: NSViewController {

    // link to the NSView Container
    @IBOutlet weak var container : NSView!

    var vc1 : ViewController1!
    var vc2 : ViewController2!

    var vc1Active : Bool = false

    override func viewDidLoad() {
        super.viewDidLoad()

        // Make sure to set your storyboard identiefiers on ViewController1 and ViewController2
        vc1 = NSStoryboard(name: "name", bundle: nil).instantiateController(withIdentifier: "ViewController1") as! ViewController1
        vc2 = NSStoryboard(name: "name", bundle: nil).instantiateController(withIdentifier: "ViewController2") as! ViewController2

        self.addChild(vc1)
        self.addChild(vc2)
        vc1.view.frame = self.container.bounds
        self.container.addSubview(vc1.view)
        vc1Active = true

    }

    // You can link this action to both buttons
    @IBAction func switchViews(sender: NSButton) {

        for sView in self.container.subviews {
            sView.removeFromSuperview()
        }

        if vc1Active == true {

            vc1Active = false
            vc2.view.frame = self.container.bounds
            self.container.addSubview(vc2.view)

        } else {

            vc1Active = true
            vc1.view.frame = self.container.bounds
            self.container.addSubview(vc1.view)
        }

    }
}

关于Swift:在 Container View/NSView 内的 NSViewController 之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54193224/

相关文章:

ios - UITableView "Content"字段未出现在 XIB 文件中(Xcode 5 和 6)

ios - 收到苹果推送通知时从 Storyboard 打开一个 View Controller

swift - 使用辅助函数从另一个类执行 Segue

ios - Segue 到 UITableViewController 覆盖导航栏

iOS Webrtc - 捕获本地视频流时崩溃

ios - 根据indexPath Swift在TableView中设置UiCell文本颜色

ios - 如何为手动调用的 Crashlytics 崩溃提供自定义函数/行/文件信息

ios - Swift 中的 HTTP 发送请求参数

ios - 根据另一个 UIViews 高度动态更改 Storyboard 中 UIView 的高度

swift - 具有多个数组的 TableView segue