如何将文本字段值从一个 ViewController 传递到第二个 ViewController (MacOS Swift)?

问题描述

我正在处理一个项目,而我的 ViewController 文件开始变得很长。因此,我想在第二个 ViewController 中定义我的所有函数,以便我可以从我的第一个 ViewController 中删除一些代码。这是有效的,除了当我尝试从我的 FirstViewController 中定义的 textField 引用值时,它返回 nil。我是 MacOS 开发的新手,因此非常感谢简单/具体的反馈。

这是我的第一个 ViewController 的示例(它初始化变量并使用函数):

class FirstViewController: NSViewController,NSTextFieldDelegate {

    @IBOutlet weak var firstName: NSTextField!
    let lastName = "Smith"  

    @IBAction func buttonpressed(_ sender: Any) {
        SecondViewController().printUserName()  
    }
}

这是我的第二个 ViewController(它定义了函数):

class SecondViewController: NSViewController,NSTextFieldDelegate {

    func printUserName() {
       print(FirstViewController().firstName!) // this returns nil :(
       print(FirstViewController().lastName) // this returns "Smith" :)
    }
}

解决方法

如果您使用 UINavigationController 移动到第二个 VC,您可以简单地定义第二个视图,然后访问该视图中的变量。

示例,FirstViewController

class FirstViewController: NSViewController,NSTextFieldDelegate {

    @IBOutlet weak var firstName: NSTextField!
    let lastName = "Smith"  

    @IBAction func buttonPressed(_ sender: Any) {
        guard let secondView = self.storyboard?.instantiateViewController(identifier: "SecondViewController") as? SecondViewController else {
                return
            }
    self.navigationController?.pushViewController(secondView,animated: false)
    secondView.textValue = firstName.text 
    }
}

SecondViewController

class SecondViewController: NSViewController,NSTextFieldDelegate {

    var textValue: String?

    override func viewDidLoad() {
       printUserName()
    }


    func printUserName() {
       if let text = textValue {
            print(text)
       }
  
    }
}