读取 UITextfields 的值时出错
Posted
技术标签:
【中文标题】读取 UITextfields 的值时出错【英文标题】:Error in reading values of UITextfields 【发布时间】:2018-03-21 13:19:50 【问题描述】:我无法从文本字段中读取值。每次我在此行中输入 let username = UsernameTextField.text
时都会收到一条错误消息:“无法在属性初始化程序中使用实例成员 'UsernameTextField';属性初始化程序在 'self' 可用之前运行”。
这里是完整的代码:
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
【问题讨论】:
因为那行“丢失”了,它“无处”不在方法中? 不在方法中是什么意思? 这行代码在方法大括号之外,但在类大括号内 它需要在一个方法(或函数)内部,而不是在类中独立 【参考方案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】:您是否有一个名为UsernameTextField
的UITextField
子类?
如果是这样,它可能是引用类而不是实例。
我建议将变量的名称保留为驼峰式。更容易区分变量和类。
如果这是您使用的约定,您也可以尝试使用
let name = self.UsernameTextField.text
编辑:
这行似乎超出了函数范围。
应该在关闭之前移动它。
【讨论】:
【参考方案3】:线
let username = UsernameTextField.text
在你的类定义的范围内,而不是在方法的范围内。因此,这构成了在构造类实例时运行的属性初始化。您正在尝试使用另一个成员变量 (UsernameTextField) 来初始化成员变量用户名。这当然是行不通的,因为必须先完全初始化对象,然后才能读取任何成员。
您的意思是将该行放在 textFieldShouldReturn 方法的范围内吗?
【讨论】:
【参考方案4】:正如错误所暗示的那样,“UsernameTextField”是一个实例成员,这意味着它在类被实例化(与静态成员相反)之前不会被实例化,这意味着当你的行被编译时,在类被实例化之前,该成员还不存在。
【讨论】:
【参考方案5】:你必须移动你的常量并将它们放在“return true”下
【讨论】:
以上是关于读取 UITextfields 的值时出错的主要内容,如果未能解决你的问题,请参考以下文章
尝试处理 /view/ajax 时出错:无法读取未定义的属性“长度”
Cloud Functions for Firebase - 序列化返回值时出错: