我有两个文本框,passwordTextField
和emailTextField
。将值输入到每个值中。当我点击print时,值将在控制台中打印。
但是,使用next函数在下一个视图控制器上填充文本框时,出现以下错误。
注意
这是在几小时前工作的,我什么也没做,所以我不确定现在如何或为什么不起作用。
@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var registerButton: UIButton!
@IBAction func registerButtonPressed(_ sender: Any) {
let next = self.storyboard?.instantiateViewController(withIdentifier: "ABC") as! ABCViewController
self.present(next, animated: true,completion: nil)
let nameText = self.emailTextField.text!
let passwordText = self.passwordTextField.text!
print(nameText) // prints email
print(passwordText) // prints password
next.username.text = nameText // prints error: Unexpectedly found nil while implicitly unwrapping an Optional value
next.password.text = passwordText
}
意外地发现nil,同时隐式展开一个Optional值。
但是在打印时显示非零值。
答案 0 :(得分:5)
该代码不可靠,因为不能保证在present
行之后立即加载第二个控制器中的视图。
直到视图可用,所有插座都为nil
。
在ABCViewController
中声明临时属性,并在viewDidLoad中填充文本字段
class ABCViewController : UIViewController {
@IBOutlet weak var username: UITextField!
@IBOutlet weak var password: UITextField!
var tempName = ""
var tempPassword = ""
// .....
func viewDidLoad() {
super.viewDidLoad()
username.text = self.tempName
password.text = self.tempPassword
}
}
在registerButtonPressed
中,将值分配给临时属性,并向控制器显示其他内容。
@IBAction func registerButtonPressed(_ sender: Any) {
let next = self.storyboard?.instantiateViewController(withIdentifier: "ABC") as! ABCViewController
next.tempName = self.emailTextField.text!
next.tempPassword = self.passwordTextField.text!
self.present(next, animated: true,completion: nil)
}