我无法从文本字段中读取值。每次我输入这一行import UIKit
class SignInViewController: UIViewController,UITextFieldDelegate {
@IBOutlet var UsernameTextField: UITextField!
@IBOutlet var PasswordTextField: UITextField!
@IBOutlet var LogInButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.isTranslucent = true
navigationController?.view.backgroundColor = UIColor.clear
// Remove Autocorrection Type
UsernameTextField.autocorrectionType = .no
PasswordTextField.autocorrectionType = .no
PasswordTextField.textContentType = UITextContentType("")
//Next button takes user to the next textfield
UsernameTextField.delegate = self
PasswordTextField.delegate = self
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == UsernameTextField{
PasswordTextField.becomeFirstResponder()
} else if textField == PasswordTextField {
self.view.endEditing(true)
}
return true
}
let username = UsernameTextField.text
}
时,我都会收到一条错误消息“无法在属性初始化程序中使用实例成员'UsernameTextField';属性初始化程序在'self'可用之前运行”。
以下是完整代码:
{{1}}
答案 0 :(得分:1)
您是否有UITextField
的子类称为UsernameTextField
?
如果是这样,它可能是引用类而不是实例。
我建议保留变量名称camelCased。可以更容易区分变量和类。
如果这是您使用的惯例,您也可以尝试使用
let name = self.UsernameTextField.text
编辑:
这条线似乎超出了功能范围。
应该在结束}
之前移动它。
答案 1 :(得分:1)
这就是你所拥有的,设置文本的调用不在函数中。
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == UsernameTextField{
PasswordTextField.becomeFirstResponder()
} else if textField == PasswordTextField {
self.view.endEditing(true)
}
return true
}
let username = UsernameTextField.text // THIS IS NOT IN A FUNCTION
将其移至此处:
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == UsernameTextField{
PasswordTextField.becomeFirstResponder()
} else if textField == PasswordTextField {
self.view.endEditing(true)
}
let username = UsernameTextField.text // THIS IS NOW IN A FUNCTION
return true
}
答案 2 :(得分:1)
你必须移动你的常数并将它们放在“return true”下
答案 3 :(得分:0)
该行
let username = UsernameTextField.text
属于类定义的范围,不在方法范围内。因此,这构成了在构造类的实例时运行的属性初始化。您正在尝试使用ANOTHER成员变量(UsernameTextField)初始化成员变量username。当然,这不起作用,因为在读取任何成员之前必须完全初始化对象。
您的意思是将该行放在方法textFieldShouldReturn的范围内吗?
答案 4 :(得分:0)
正如错误所示,“UsernameTextField”是一个实例成员,这意味着在实例化类之前它不会被实例化(而不是静态成员),这意味着在编译类之前,在实例化类之前,该成员尚不存在。