uialert example objective-c xcode swift uialertview uialertcontroller

objective-c - example - uialertcontroller swift 4



UIAlertController se muestra con retraso (2)

Tengo un problema con UIAlertController en mi aplicación ahora migrado a iOS8 con selector de fecha en el interior.

A continuación está el código.

UIAlertController *AlertView = [UIAlertController alertControllerWithTitle:title message:nil preferredStyle:UIAlertControllerStyleActionSheet]; UIAlertAction *ok = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { [AlertView dismissViewControllerAnimated:YES completion:nil]; }]; UIAlertAction *set = [UIAlertAction actionWithTitle:NSLocalizedString(@"Set to today", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { [self set_to_today:nil]; [AlertView dismissViewControllerAnimated:YES completion:nil]; [self.tableView reloadData]; }]; UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { [AlertView dismissViewControllerAnimated:YES completion:nil]; }]; UIDatePicker *datePicker = [[[UIDatePicker alloc] init] autorelease]; datePicker.datePickerMode = UIDatePickerModeDate; [datePicker setDate:data_appo]; [datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged]; [AlertView.view addSubview:datePicker]; [AlertView addAction:ok]; [AlertView addAction:set]; [AlertView addAction:cancel]; [self.view bringSubviewToFront:datePicker]; [self presentViewController:AlertView animated:YES completion:nil];

UIAlertController y Date Picker se muestran cuando el usuario selecciona una fila de UITableViewController.

El problema es el siguiente: la primera vez que los usuarios seleccionan la fila todo funciona bien ... pero si el usuario selecciona "Cancelar" y luego selecciona de tate nuevamente, el UIAlertController tardará 2-3 segundos en aparecer ... esto también ocurre en el simulador ...

Me estoy volviendo loco ... esto hace que mi aplicación tenga una mala experiencia de usuario.

Cualquier ayuda será muy apreciada Gracias

Alex


Estaba teniendo el mismo problema con un UIAlertController presentado al seleccionar una fila de una UITableView. La primera vez que todo funcionó bien, y luego, cuando el usuario activó la alerta nuevamente, hubo un retraso de unos segundos antes de que se presentara realmente la alerta.

Como solución, utilicé GCD:

dispatch_async(dispatch_get_main_queue(), ^{ [self presentViewController:AlertView animated:YES completion:nil]; });

Probablemente sea un error desde -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath ya se ejecuta en el hilo principal.

rdar://19285091 un informe de error a Apple: rdar://19285091


DispatchQueue.main.async { self.present(alertView, animated: true, completion:nil) }

Swift 3.0 versión. Alternativamente, establecer animated: false también resolvió mi problema.