iOS(Swift):UITextField是不是成为firstFirstsponder方法后的第一响应者吗?

ale*_*wis 1 uitextfield becomefirstresponder ios swift

UITextField在内有一个数组UIViewController

@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var textField2: UITextField!
var textFields: [UITextField] {
    return [textField1, textField2]
}
Run Code Online (Sandbox Code Playgroud)

在我的viewDidLoad方法中,我将textFields数组的第一个元素设置为第一个响应者,并将其所有委托设置如下:

override func viewDidLoad() {
    super.viewDidLoad()

    textFields[0].becomeFirstResponder()
    textFields.forEach({ $0.delegate = self })

    print(textFields.map({ $0.isFirstResponder })) // [false, false]

}
Run Code Online (Sandbox Code Playgroud)

但是,印刷品中的viewDidLoad印刷品声明[false, false]而不是[true, false]我预期的那样。为什么?

谢谢

mat*_*att 5

您运行该代码的时间过早。在期间viewDidLoad,没有文本字段可以成为第一响应者,因为界面中甚至没有文本字段。

换句话说,请尝试将代码更改为:

print(textFields.map({ $0.window == nil }))
Run Code Online (Sandbox Code Playgroud)

您将得到[true, true],证明文本字段尚未在任何窗口中。但是第一响应者的状态是基于窗口的;自由浮动文本字段不能是第一响应者。