becomeFirstResponder 有时在 ios 10 上打不开键盘

Dzi*_*ior 5 becomefirstresponder ios touch-id swift ios10

我正在使用代码创建本机触摸 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)
        }
    })]
Run Code Online (Sandbox Code Playgroud)

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

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

    view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)

这是handleTouchIdAuthentication的代码:

private func handleTouchIdAuthentication(granted granted: Bool) {
    if granted {
        //...
    } else {
        passcodeDigitTextField1.becomeFirstResponder()
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,大多数时候,当我取消 Touch ID 本机对话框时,警报会正确关闭,并变为FirstResponder() 工作正常。

然而,大约十分之一的情况下,becomeFirstResponder() 返回 true,passcodeDigitTextField1 获得焦点,但键盘不会出现。此外,即使我通过点击其他文本字段将焦点更改为其他文本字段,键盘也不会显示出来。

奇怪的是,这在 iOS 9 和 8 上运行良好。该问题仅发生在 iOS 10 上

Raj*_*ari 1

你能尝试这样做吗?不确定它会起作用!

DispatchQueue.main.async {
      passcodeDigitTextField1.becomeFirstResponder()
}
Run Code Online (Sandbox Code Playgroud)