El rechazo de UIAlertController es lento

Después de iOS 8, cambiar mi implementación a UIAlertController en lugar de UIAlertView me está dando algunos dolores de cabeza.

El rechazo tarda alnetworkingedor de un segundo antes de que la interfaz de usuario sea receptiva después de hacer clic en un button. Significa que los usuarios piensan que hay algo mal.

¿Soy el único que sufre de esto? Es a través de varias aplicaciones, y cierto para una implementación tan simple como esta. Intenté esto en un nuevo proyecto en blanco.

- (IBAction)showAlertView { [[[UIAlertView alloc] initWithTitle:@"test" message:@"test" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] show]; } -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { NSLog(@"this is fast"); } -(IBAction)showAlert { UIAlertController *controller = [UIAlertController alertControllerWithTitle:@"test" message:@"test" prefernetworkingStyle:UIAlertControllerStyleAlert]; [controller addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { NSLog(@"this is slow"); }]]; [self presentViewController:controller animated:NO completion:nil]; } 

Al hacer clic en el button se produce una demora de 1 segundo antes de que se imprima algo en la console. La presentación de la alerta no se demora en absoluto.

Editar: Según el momento más cercano, probablemente sea más como 700 ms, por lo que no es un segundo completo, pero aún así es demasiado largo para algo que debería ser instantáneo.

Sé que es una pregunta anterior pero tuve el mismo problema y agregar esto en el ViewController presentando el UIAlertController lo resolvió para mí:

 - (BOOL)canBecomeFirstResponder { return YES; } 

Versión Swift:

 override func canBecomeFirstResponder() -> Bool { return true } 

Lamentablemente, anular canBecomeFirstResponder no nos ayudó.

Lo que nos ayudó fue llamar a resignFirstResponder a los posibles respondedores en el controller de vista ANTES de mostrar la alerta.

Por alguna razón, si un campo de text era un primer respondedor, parece que trataría de atravesar la jerarquía de vista buscando el próximo respondedor. Si no había ningún foco de text, el retraso desapareció.