iOS 9: el keyboard aparece después de que UIAlertView se desestimó

Tengo un extraño error visual que solo afecta a los dispositivos iOS 9:

El inicio de session de la aplicación UIViewController ejecuta y obtiene un token de OAuth cuando presionas el button, como te lo esperas. Si la respuesta de mi API devuelve un código de estado específico, aparece un UIAlertView diciendo que necesitan restablecer su contraseña (esto es si han sido marcados como tales en el extremo del server). Los campos de correo electrónico y contraseña para iniciar session resignFirstResponder una vez que presionas el button, cosas estándar.

Solo en iOS 9, si presiona la ruta de restablecimiento, en el segundo toque OK en esa vista de alerta, el keyboard aparecerá una copy de security, quizás 800 ms, luego se volverá a cerrar. Es casi como si algo estuviera en queue para presentarlo, pero la presencia de la alerta lo bloqueó hasta que presionó OK; es absolutamente instantáneo después de haber estado bien en la alerta.

Parece muy complicado depurar. becomeFirstResponder puntos de corte simbólicos para becomeFirstResponder en primer becomeFirstResponder y no se llama a ninguna parte cerca de este process.

¿Alguna otra idea de cómo puedo ver la debugging / reparación de esto? No afecta iOS 7 e iOS 8, solo iOS 9.

Me enfrenté a este problema hace unos 30 minutos.

El UIAlertView ha quedado en desuso desde que se lanzó iOS9.

Resolvimos este problema usando el UIAlertController, así:

  UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Alert Title!" message:@"This is an alert message." prefernetworkingStyle:UIAlertControllerStyleAlert]; UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; [alertController addAction:ok]; [self presentViewController:alertController animated:NO completion:nil]; 

Esto debería arreglar tu problema.

Si está animado = SÍ, es posible que tenga el mismo problema que antes. Este es un error con iOS9.

Déjame saber cómo va y si esto soluciona tu problema.

Aquí hay una extensión para manejar esto en swift 3

 extension UIViewController { func presentOk(with title: String, and message: String, handler: ((UIAlertAction) -> Void)?) { let alert = UIAlertController(title: title, message: message, prefernetworkingStyle: UIAlertControllerStyle.alert) alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: handler)) OperationQueue.main.addOperation { self.view.endEditing(true) self.present(alert, animated: true, completion: nil) } } } 

La key es ocultar el keyboard y presentar el controller en la queue principal.

Uso

 presentOk(with: "My app title", and: "this is the alert message", handler: nil)