2016-12-07 2 views
1

У меня есть контроллер безопасности, который вызывает сенсорный идентификатор, когда приложение становится активным. Если пользователь отменил окно Touch ID, появится клавиатура, чтобы ввести цифровой код. Но моя клавиатура загружена (inputAccessoryView рисуется в хорошем положении), но невидимым. Мне нужно, чтобы меню и клавиатура отображались на экране.Невидимая клавиатура, когда приложение становится активным после TouchID

Я попытался это решение, которое не работает: Super slow lag/delay on initial keyboard animation of UITextField

if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) { 
    [myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:myLocalizedReasonString 
    reply:^(BOOL success, NSError *error) { 
     if (success) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       NSLog(@"User authenticated successfully, take appropriate action"); 
      }); 
     } else { 
      NSLog(@"User did not authenticate successfully, look at error and take appropriate action"); 

      dispatch_async(dispatch_get_main_queue(), ^(void){ 
       [self._fieldSecurity becomeFirstResponder]; 
      }); 
     } 
    }]; 
} else { 
    NSLog(@"Could not evaluate policy; look at authError and present an appropriate message to user"); 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self._fieldSecurity becomeFirstResponder]; 
    }); 
} 
+0

Ваш код, кажется, хорошо. Проблема кажется где-то еще, можете ли вы поделиться еще несколькими кодами? – SHN

+0

Даже я столкнулся с той же проблемой, до сих пор не найдено. –

+1

Возможный дубликат http://stackoverflow.com/questions/39045675/ios-keyboard-inside-uiremotekeyboardwindow-is-not-shown-when-uitextfield-becom – Simo

ответ

3

Как временное решение, назвать becomeFirstResponder с задержкой (с использованием dispatch_after), но до сих пор на главной очереди.

Мое предположение заключается в том, что вид TouchID находится в другом окне, чем в обычном окне приложения. Когда пользователь отменяет аутентификацию TouchID, окно TouchID все еще является ключевым окном, поэтому при вызове вашего UITextField в нижнем окне появляется проблема с клавиатурой. Но, как я уже сказал, это просто догадка.

Update с кодом:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^(void){ 
    // Pop the keyboard 
}); 
+0

это работает ... пока я попытаюсь отлаживать глубже! Спасибо за исправление :) – Ludovic

+0

Он по-прежнему не работает в моем iPhone 7 Plus, 'dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t) (0.33 * NSEC_PER_MSEC)), dispatch_get_main_queue(),^{ [fakeField статьFirstResponder]; }) ; 'после отмены пароля для пароля Touch ID. – Max

Смежные вопросы