swift - 使用数据在 2 个不同的 NSViewController 之间切换

标签 swift macos navigation

我在 Swift 和 OSX 开发方面绝对是新手,如果我的问题太菜鸟,我很抱歉。我想了解 NSViewController 之间的导航原理。

我有默认的ViewController,其中有登录名和密码字段以及登录按钮。点击按钮后,返回token。现在我尝试将“view”更改为SecondViewController并保存在某个地方 token ,我将来会需要它。我该怎么做?可以在函数中做到这一点吗?:

@IBAction func loginButton(_ sender: Any) {
   .... 
}

谢谢!

最佳答案

您需要使用segues来执行此操作。

首先使用 Storyboard编辑器在ViewControllers之间建立segues连接。之后,您需要在 Storyboard的属性检查器上为 segues 提供一个标识符。然后,在您的代码中,您可以通过 segue 调用新的 ViewController,如下面的代码所示。

使用此代码,您可以使用按钮传递数据:

class ViewController: NSViewController {

    var dataToPass: String = "DataToPass"

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func loginButton(_ sender: Any) {

        performSegue(withIdentifier: NSStoryboardSegue.Identifier(rawValue: "segueIdentifier"), sender: self)
    }

    override func prepare(for segue: NSStoryboardSegue, sender: Any?) {

        if segue.identifier!.rawValue == "segueIdentifier" {
            let destinationViewController = segue.destinationController as! ViewController2

            destinationViewController.dataToReceive = dataToPass
        }
    }
}


class ViewController2: NSViewController {

    var dataToReceive: String

    override func viewDidLoad() {
        super.viewDidLoad()

    }
}

通过此代码,您将使用覆盖 viewWillAppear

class ViewController: NSViewController {

    var dataToPass: String = "DataToPass"

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func viewWillAppear() {

        performSegue(withIdentifier: NSStoryboardSegue.Identifier(rawValue: "segueIdentifier"), sender: self)
    }

    override func prepare(for segue: NSStoryboardSegue, sender: Any?) {

        if segue.identifier!.rawValue == "segueIdentifier" {
            let destinationViewController = segue.destinationController as! ViewController2

            destinationViewController.dataToReceive = dataToPass
        }
    }
}


class ViewController2: NSViewController {

    var dataToReceive: String

    override func viewDidLoad() {
        super.viewDidLoad()

    }
}

在这两种情况下,您都需要确保要传递给另一个 View Controller 的数据不为空。

关于swift - 使用数据在 2 个不同的 NSViewController 之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48668457/

相关文章:

ios - 如何在 iOS 中将 Facebook 帐户链接到 Firebase 用户

swift - 将 customCell 标签文本发送到目标 View

python - 在没有特权模式的Docker环境中操纵Docker中容器之间的网络流量?

iphone - Swift/UI Builder 中的编程分页导航

css - 如何创建弹出式多列菜单?

xcode - 在 Swift 中将 float 显示为可变的小数位数

swift - SetNeedsDisplay 无效

objective-c - 通过代码而不是 IB 使用 BWToolkit

android - 当 Studio 找不到时,如何在 Mac 上找到 Android SDK?

image - Flutter Navigation 和同时对 dispose() 的要求