swift - 为什么 becomeFirstResponder 不会在警报消息文本字段上触发软键盘
问题描述
我有一个 UIAlertControllertextField
在我的应用程序上显示。被textField
选中(标记在其中闪烁)并.becomeFirstResponder
设置在 上textField
。但由于某种原因,soft-keyboard
没有显示。我打印了一个布尔值isFirstResponder
,它返回了false
。
我在某处读到它必须被触发viewDidLoad
,但在这种情况下这是不可能的,因为通过按下 a之外的button
a 来显示警报function
viewDidLoad
这是我的代码:
func verificationPopup(title: String, message: String, codeShouldBeVerified: Bool, context: UIViewController, callback: @escaping() -> Void) {
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
//THIS IS THE RELEVANT PART
if(codeShouldBeVerified) {
alert.addTextField(configurationHandler: { textField in
textField.placeholder = "Fyra siffror"
textField.textAlignment = NSTextAlignment.center
textField.delegate = self as? UITextFieldDelegate
textField.becomeFirstResponder()
print("HERE", textField.isFirstResponder)
})
alert.addAction(UIAlertAction(title: "Jag fick ingen kod", style: .default, handler: { action in
callback()
}))
}
else {
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
callback()
//self.verifyNumber()
}))
alert.addAction(UIAlertAction(title: "Avbryt", style: .cancel, handler: {
action in
print("CAAAANCEL")
}))
}
context.present(alert, animated: true)
}
.isFirstResponder
当我刚刚设置它时返回 false似乎很奇怪。这里发生了什么?
解决方案
在某些情况下,软键盘不会出现是正常的。
(a) 当蓝牙键盘连接到真实设备时,或
(b) 在设备模拟器中模拟硬件键盘时(菜单:Hardware->Keyboard->Connect Hardware Keyboard)。
我知道这一点很长时间了,但有时我仍然会感到困惑,为什么直到我记得检查键盘才会出现(主要是在使用模拟器时)。很容易错过,所以请确保这里不是这种情况。