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

时间:2016-10-28 14:36:22

标签: ios swift ios10 touch-id becomefirstresponder

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

AssertTrue(string1.Equals(string2))
调用本机Touch ID警报的

按钮处理程序如下所示:

lst  = [('this', 4, 3), ('that', 9, 3), ('those', 2, 6)]

这是handleTouchIdAuthentication的代码:

    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本机对话框时,警报正确解除并且winsFirstResponder()正常工作。

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

扼杀,这适用于ios 9和8. 问题仅在iOS 10上发生

4 个答案:

答案 0 :(得分:2)

正如Rajan所说:

  

只是一个黑客。你能做到吗?   函数和调用中的passcodeDigitTextField1.becomeFirstResponder()   该功能延迟0.25或0.5秒使用   performSelector并告诉结果 -

这很有效,我最终以0.01延迟

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

答案 1 :(得分:2)

每次在完全相同的情况下都会发生这种情况,尝试在Touch ID身份验证失败后设置字段焦点。我通过在默认的NSNotificationCenter上订阅UIApplicationDidBecomeActiveNotification并将我的电话调用becomeFirstResponder来解决它。

ApplicationDidBecomeActive在 Touch ID回调之后稍微触发,这可能解释了这个问题。

编码稍微有些尴尬,但到目前为止,它的工作时间是100%。比performSelector更好。

答案 2 :(得分:1)

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

DispatchQueue.main.async {
      passcodeDigitTextField1.becomeFirstResponder()
}

答案 3 :(得分:0)

这可能听起来真的很愚蠢但是...在我的情况下,一旦它帮助重启整个设备。只是。它也只是iOS 10。 ;)也许有人有类似的问题,并且在检查堆栈溢出之前没有尝试过,因为像这样的错误重新启动设备似乎有点奇怪。