繁体   English   中英

为什么 becomeFirstResponder 不会在警报消息文本字段上触发软键盘

[英]Why doesn't becomeFirstResponder trigger soft keyboard on alert message textField

我有一个 UIAlertController,我的应用程序上显示了一个textField textField被选中(标记在其中闪烁)并且.becomeFirstResponder被设置在textField上。 但由于某种原因, soft-keyboard没有显示。 我打印了 boolean isFirstResponder并返回false

我在某处读到它必须在viewDidLoad中触发,但在这种情况下这是不可能的,因为通过按下viewDidLoad之外的function中的button来显示警报

这是我的代码:

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)。

我知道这一点很长时间了,但有时我仍然会感到困惑,为什么直到我记得检查键盘才会出现(主要是在使用模拟器时)。 很容易错过,所以请确保这里不是这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM