簡體   English   中英

iOS(Swift):UITextField是不是成為firstFirstsponder方法后的第一響應者嗎?

[英]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({ $0.delegate = self })

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

}

但是, viewDidLoad的print語句會打印[false, false]而不是我可能期望的[true, false] 為什么?

謝謝

您運行該代碼的時間過早。 viewDidLoad期間,沒有文本字段可以成為第一響應者,因為界面中甚至沒有文本字段。

換句話說,請嘗試將代碼更改為:

print(textFields.map({ $0.window == nil }))

您將得到[true, true] ,證明文本字段尚未在任何窗口中。 但是第一響應者的狀態是基於窗口的; 自由浮動文本字段不能是第一響應者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM