这是我对segue代码的准备
switch segue.identifier! {
case SegueIdentifiers.SecondUIViewController.rawValue:
print("\(SegueIdentifiers.SecondUIViewController.rawValue)")
let secondViewController = segue.destinationViewController as? SecondViewController
secondViewController!.resultTextField.text = "asdfasdf"
//break
default:
print("nothing sweetheart")
break
}
我在这一行没有例外
secondViewController!.resultTextField.text = "asdfasdf"
为什么?已存在的文本字段
这是第二个视图控制器
import UIKit
class SecondViewController: UIViewController {
@IBOutlet weak var resultTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
}
}
答案 0 :(得分:3)
在outlets
之前,您的viewDidLoad
未设置。在此之前,他们都是nil
。这就是他们选择的原因。因此,当您尝试从prepareForSegue
访问它们时,它们仍为nil
。
我建议您向视图控制器添加新属性,并从prepareForSegue
设置该属性。稍后设置outlets
时,您可以更新文本字段。
// in prepareForSegue
let secondViewController = segue.destinationViewController as? SecondViewController
secondViewController!.resultText = "asdfasdf"
然后在你的视图控制器中
class SecondViewController: UIViewController {
var resultText: String = "" {
didSet {
resultTextField?.text = text
}
}
@IBOutlet weak var resultTextField: UITextField! {
// Will be set once in viewDidLoad.
// Whenever that happens update text.
didSet {
resultTextField.text = resultText
}
}
}
现在,您可以在设置resultText
之前修改outlets
属性中的文本字段,并且由于didSet
属性观察者,它们将在设置时更新。