为什么不成为警报消息textField上的FirstResponder触发软键盘

时间:2019-10-01 08:16:22

标签: swift xcode uialertcontroller iphone-softkeyboard

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

我在某处读到它必须在viewDidLoad中触发,但是在这种情况下这是不可能的,因为通过按下位于button之外的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似乎很奇怪。这是怎么回事?

1 个答案:

答案 0 :(得分:1)

在某些情况下,软键盘通常不会弹起。

(a)当真实设备上连接了蓝牙键盘时,或

(b)在设备模拟器中模拟硬件键盘时(菜单:Hardware-> Keyboard-> Connect Hardware Keyboard)。

我很长一段时间都知道这一点,但有时我还是感到困惑,为什么直到我记得检查(大多数是在使用模拟器时)才会出现键盘。很容易错过,因此请确保这里不是这种情况。