iOS (Swift): 调用 becomeFirstResponder 方法后,UITextField **不是**第一响应者?
iOS (Swift): UITextField is **not** first responder after becomeFirstResponder method is called?
我在 UIViewController
中有一个 UITextField
数组:
@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var textField2: UITextField!
var textFields: [UITextField] {
return [textField1, textField2]
}
在我的 viewDidLoad
方法中,我将 textFields
数组的第一个元素设置为第一响应者并将它们的所有委托设置如下:
override func viewDidLoad() {
super.viewDidLoad()
textFields[0].becomeFirstResponder()
textFields.forEach({ [=13=].delegate = self })
print(textFields.map({ [=13=].isFirstResponder })) // [false, false]
}
但是,viewDidLoad
中的打印语句打印出 [false, false]
而不是我预期的 [true, false]
。为什么?
谢谢
你 运行 这个代码太早了。 viewDidLoad
期间没有文本字段可以成为第一响应者,因为界面中还没有文本字段。
换句话说,尝试将您的代码更改为:
print(textFields.map({ [=10=].window == nil }))
您将得到 [true, true]
,证明文本字段还不在任何 window 中。但是急救员身份是基于window的;自由浮动的文本字段不能成为第一响应者。
我在 UIViewController
中有一个 UITextField
数组:
@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var textField2: UITextField!
var textFields: [UITextField] {
return [textField1, textField2]
}
在我的 viewDidLoad
方法中,我将 textFields
数组的第一个元素设置为第一响应者并将它们的所有委托设置如下:
override func viewDidLoad() {
super.viewDidLoad()
textFields[0].becomeFirstResponder()
textFields.forEach({ [=13=].delegate = self })
print(textFields.map({ [=13=].isFirstResponder })) // [false, false]
}
但是,viewDidLoad
中的打印语句打印出 [false, false]
而不是我预期的 [true, false]
。为什么?
谢谢
你 运行 这个代码太早了。 viewDidLoad
期间没有文本字段可以成为第一响应者,因为界面中还没有文本字段。
换句话说,尝试将您的代码更改为:
print(textFields.map({ [=10=].window == nil }))
您将得到 [true, true]
,证明文本字段还不在任何 window 中。但是急救员身份是基于window的;自由浮动的文本字段不能成为第一响应者。