Pregunta

Escribo un fragmento de código para & "; hacer algo - > mostrar alerta1 - > hacer algo - > mostrar alerta2 &";


    //do something
    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:@"Alert 1" 
                          message:nil 
                          delegate:nil 
                          cancelButtonTitle:@"OK" 
                          otherButtonTitles:nil];
    [alert show];
    [alert release];
    //do something  
    UIAlertView *alert2 = [[UIAlertView alloc] 
                           initWithTitle:@"Alert 2" 
                           message:nil 
                           delegate:nil 
                           cancelButtonTitle:@"OK" 
                           otherButtonTitles:nil];
    [alert2 show];
    [alert2 release];

Y de repente algo extraño sucedió con AlertViews múltiples: Muestra " Alert 1 " - > " Alert 2 " (Presione 'OK' ) - > " Alerta 1 " ;. ¿Por qué & Quot; Alerta 1 & Quot; muestra de nuevo? Todavía no he escrito ningún método delegado. ¿Quizás un error? (Gracias a cobbal, alert1 todavía está allí cuando aparece alert2).

Encuentro - (vacío) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex funciona bien. ¿Es el método delegado una forma común de mostrar múltiples alertViews?

¿Fue útil?

Solución

Supongo que la alerta 1 se muestra y luego se cubre con la alerta 2, ya que show no es modal. Cuando la alerta 2 está cerrada, la alerta 1 todavía está abierta.

A su segunda pregunta, alertView:didDismissWithButtonIndex: puede funcionar mejor, pero en realidad no lo he probado.

Otros consejos

El delegado es para que pueda ser notificado cuando se descarta la alerta y qué botón se usó para descartarla. No afecta si la alerta se descarta en absoluto.

La alerta permanecerá visible hasta que se descarte tocando un botón (si corresponde, no son obligatorios) o llame al [UIAlertView dismissWithClickedButtonIndex:animated] o al método (no documentado) dismiss de la instancia de alerta.

Parece que (como sugirió Cobbal), la alerta 2 aparece sobre la alerta 1, descarta la alerta 2 y la alerta 1 permanece allí (hasta que se descarta).

¿Hay alguna razón en particular por la que desea mostrar una nueva alerta mientras todavía se muestra otra? Quizás un poco más de contexto nos ayudaría a llegar a la raíz del problema, que sospecho que puede ser un problema de diseño.

[edit] volviendo a esto y leyendo de nuevo, me pregunto si lo que está preguntando con el método delegado es si debería mostrar la alerta 2 desde allí. En cuyo caso, eso es probablemente lo que desea, ya sea directa o indirectamente. Por indirectamente quiero decir que puede tener algún estado establecido en otro lugar que determina si se debe mostrar la alerta 2 (o las circunstancias que la conducen). Ese estado (una bandera, tal vez) podría establecerse cuando muestra la primera alerta y borrarse cuando la alerta se descarta (del método de delegado).

La razón por la que esto sucede es porque UIAlertView no se bloquea mientras se muestra. Cualquier código escrito después de mostrar una vista de alerta se ejecutará inmediatamente después de que se muestre la alerta.

Lo que debes tener son dos métodos diferentes. Uno que hace algo y luego muestra una alerta, y luego otro que hace algo y muestra otra alerta.

Inicie el primer método para hacer algo y muestre una alerta, y luego conéctese al método delegado de la alerta, y cuando reciba la devolución de llamada desde la vista de alerta, ejecute el otro método.

De esta manera, la segunda parte del proceso no ocurrirá hasta que el usuario haya presionado OK en la alerta en la primera parte del proceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top