iOS( swift ): UITextField is **not** first responder after becomeFirstResponder method is called?

标签 ios swift uitextfield becomefirstresponder

我在 UIViewController 中有一个 UITextField 数组:

@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var textField2: UITextField!
var textFields: [UITextField] {
    return [textField1, textField2]
}

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

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],证明文本字段尚未出现在任何窗口中。但是第一响应者状态是基于窗口的;自由 float 的文本字段不能成为第一响应者。

关于iOS( swift ): UITextField is **not** first responder after becomeFirstResponder method is called?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50627555/

相关文章:

ios - ios-TableView内的动画扩展TableView(在第一行上点击)

ios - 如何在根 TableView Controller 中通过 swift 在两个 TableView 之间建立 Segue 连接?

ios - 如何使用 Swift 将图像上传到 iOS 中的服务器?

ios - 编辑事件不起作用

iphone - 点击键盘上的返回键时提交登录表单条目

ios - becomeFirstResponder() 不起作用

iphone - objective-c:如何访问 Tableview 第二部分第一行的文本字段?

ios - 为什么 SpriteKit 场景中的循环图像之间存在间隙?

ios - 你如何实现 UIAccessibility 协议(protocol)?

Swift Combine - 等待所有发布者