【问题标题】:Passing data from a ViewController to a TabViewController将数据从 ViewController 传递到 TabViewController
【发布时间】:2025-12-10 00:10:01
【问题描述】:

我想知道最有效的方法是将变量(例如:字符串)从一个常规 ViewController 传递到 TabViewController。 (不是 iOS => 只有 OSX) 我一直在搜索和尝试不同的东西,我知道有“prepareForSegue”功能,但我似乎无法让它适用于标签视图。 (我试图将超过 50-70 个变量传递给下一个视图)有没有办法创建一个单独的文件,我可以在其中存储所有变量,然后将其导入新的视图控制器?我知道这适用于目标 c。 我在 Swift 中尝试了类似的方法,但是当我在第二个视图控制器中调用它们时,这些值似乎并没有存储在 vars 中。

请不要开始链接到常规视图控制器的教程,因为我已经阅读了其中的 10 篇,但似乎都没有帮助。

我还下载了 Swift 手册并检查了 Xcode 中的文档,但我不清楚。

PS:X-code 是纯粹的,彻头彻尾的 sh*t。我认为来自苹果的东西会比这个无用的 IDE 更容易访问。只是想通风...

【问题讨论】:

  • 我解决了我自己的问题:我从 Swift 切换回了 Objective C,并刚刚声明了一个新的 NSObject 文件并将所有变量放入该文件中。然后我将我的 vars.h 头文件导入到我需要它的文件中,并且像一个魅力一样工作。希望这个答案可以帮助其他人......

标签: macos swift viewcontroller


【解决方案1】:

虽然你找到了答案,但这里是使用 Swift 的方法

import Cocoa

@objc protocol SomeDelegate {
    func passData(sender: ViewController, data: String)
}

class ViewController: NSViewController {

    weak var delegate: SomeDelegate?

    override func viewDidLoad() {
        super.viewDidLoad()

        if let myTabViewController = parentViewController as? MyTabViewController {
            self.delegate = myTabViewController
        }
    }

    @IBAction func buttonPressed(sender: AnyObject) {
        delegate?.passData(self, data: "Hello, world!")
    }
}

在你的标签视图控制器中:

class MyTabViewController: NSTabViewController, SomeDelegate {

    func passData(sender: ViewController, data: String) {
        print("Data is \(data)")
    }
}

【讨论】: