读取UITextfields的值时出错

时间:2018-03-21 13:19:50

标签: swift

我无法从文本字段中读取值。每次我输入这一行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}}

5 个答案:

答案 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”是一个实例成员,这意味着在实例化类之前它不会被实例化(而不是静态成员),这意味着在编译类之前,在实例化类之前,该成员尚不存在。