问题描述
我正在处理一个项目,而我的 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)
}
}
}