[英]iOS (Swift): UITextField is **not** first responder after becomeFirstResponder method is called?
I have an array of UITextField
s inside a UIViewController
: 我在
UIViewController
有一个数组UITextField
:
@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var textField2: UITextField!
var textFields: [UITextField] {
return [textField1, textField2]
}
In my viewDidLoad
method, I set the first element of the textFields
array to be the first responder and set all of their delegates as follows: 在我的
viewDidLoad
方法中,我将textFields
数组的第一个元素设置为第一个响应者,并将其所有委托设置如下:
override func viewDidLoad() {
super.viewDidLoad()
textFields[0].becomeFirstResponder()
textFields.forEach({ $0.delegate = self })
print(textFields.map({ $0.isFirstResponder })) // [false, false]
}
However, the print statement in the viewDidLoad
prints [false, false]
rather than [true, false]
as I might have expected. 但是,
viewDidLoad
的print语句会打印[false, false]
而不是我可能期望的[true, false]
。 Why? 为什么?
Thanks 谢谢
You're running this code too soon. 您运行该代码的时间过早。 No text field can become first responder during
viewDidLoad
, because no text field is even in the interface yet. 在
viewDidLoad
期间,没有文本字段可以成为第一响应者,因为界面中甚至没有文本字段。
To put it another way, try changing your code to: 换句话说,请尝试将代码更改为:
print(textFields.map({ $0.window == nil }))
You'll get [true, true]
, proving that the text fields are not yet in any window. 您将得到
[true, true]
,证明文本字段尚未在任何窗口中。 But first responder status is window-based; 但是第一响应者的状态是基于窗口的; a free-floating text field cannot be first responder.
自由浮动文本字段不能是第一响应者。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.