ios - becomeFirstResponder 有时无法打开 ios 10 上的键盘

标签 ios swift ios10 touch-id becomefirstresponder

我正在使用代码创建原生触摸 ID 提醒:

    let context = LAContext()

    guard deviceCanUseTouchId(context: context) else {
        return
    }

    presentingAlert = true
    [context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: "touch_id_auth_message".localized(), reply: { [unowned self] success, error -> Void in
        self.presentingAlert = false
        self.canPresentAlert = true

        dispatch_async(dispatch_get_main_queue()) {    
            completionHandler?(success)
        }
    })]

调用 native Touch ID 警报的按钮处理程序如下所示:

@IBAction func touchUpInsideUseTouchIdButton(sender: AnyObject) {
    ACTouchId.sharedManager.authenticateWithTouchId(completionHandler: { [weak self] in
        self?.handleTouchIdAuthentication(granted: $0)
        })

    view.endEditing(true)
}

这是 handleTouchIdAuthentication 的代码:

private func handleTouchIdAuthentication(granted granted: Bool) {
    if granted {
        //...
    } else {
        passcodeDigitTextField1.becomeFirstResponder()
    }
}

问题是,大多数时候,当我取消 Touch ID native 对话框时,警报会正确解除并且 becomeFirstResponder() 工作正常。

然而,在 10 次左右的情况下,becomeFirstResponder() 返回 true,passcodeDigitTextField1 获得焦点,但键盘没有出现。此外,即使我通过点击将焦点更改到其他文本字段,键盘也不会显示。

奇怪的是,这适用于 ios 9 和 8。这个问题只发生在 iOS 10 上

最佳答案

正如 Rajan 提到的:

Just a hack. Can you just do passcodeDigitTextField1.becomeFirstResponder() in a function and call that function with a delay of 0.25 or 0.5 seconds using performSelector and tell the result –

这成功了,我最终延迟了 0.01

我不会标记这个答案,因为这只是一种解决方法。

关于ios - becomeFirstResponder 有时无法打开 ios 10 上的键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40307462/

相关文章:

ios - 如果用户拒绝访问相机,如何防止 WKWebView 显示相机模式?

ios - 首次加载后如何在 UICollectionView 中选择某些项目?

ios - apple pay测试无法添加测试卡

ios - 在 CoreData 中使用 Swift 的日期

iOS 10 - 每 "x"分钟重复一次通知

swift3 - 多点连接未以编程方式连接

iOS:演示 Controller 帧大小随设备方向变化

ios - UITextView 中的 UITextField?

ios - 我如何计算包含特定艺术家的文件?

swift - 无法将类型 'NSAttributedString.DocumentAttributeKey' 的值转换为预期的字典键类型 'NSAttributedString.DocumentReadingOptionKey'