【发布时间】:2016-10-28 14:36:21
【问题描述】:
我正在使用代码创建本机触摸 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)
}
})]
调用本机 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 原生对话框时,警报会正确关闭并且 becomeFirstResponder() 工作正常。
然而,在大约 10 次中,becomeFirstResponder() 返回 true,passcodeDigitTextField1 获得焦点,但键盘没有出现。此外,即使我通过点击它们将焦点更改为其他文本字段,键盘也不会显示自己。
奇怪的是,这适用于 ios 9 和 8。此问题仅在 iOS 10 上发生。
【问题讨论】:
-
你能在主线程中做那部分吗?
-
你是用模拟器还是真机?
-
我正在使用带有 iOS 10.0.2 的实际设备。
-
handleTouchIdAuthentication 方法实际上被分派到主队列(参见完成处理程序代码在第一个 sn-p 中分派)
标签: ios swift ios10 touch-id becomefirstresponder