Domanda

Scrivo un pezzo di codice su " fai qualcosa - > mostra avviso1 - > fai qualcosa - > mostra avviso2 ".


    //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];

E improvvisamente è successa una cosa strana a più AlertViews: mostra " Alert 1 " - > " Alert 2 " (Premi 'OK' ) - > " Avviso 1 " ;. Perché & Quot; Avviso 1 & Quot; mostra di nuovo? Non ho ancora scritto alcun metodo delegato. Forse un bug? (Grazie a Cobbal, alert1 è ancora lì quando appare alert2.)

Trovo - (vuoto) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex funziona bene. Il metodo delegato è un modo comune per mostrare più avvisi?

È stato utile?

Soluzione

Immagino che l'avviso 1 sia mostrato e quindi coperto dall'avviso 2 poiché show non è modale. Quando l'avviso 2 viene chiuso, l'avviso 1 è ancora aperto.

Alla tua seconda domanda, alertView:didDismissWithButtonIndex: potrebbe funzionare meglio, ma in realtà non l'ho provato.

Altri suggerimenti

Il delegato è in modo che tu possa essere avvisato quando l'allerta viene respinta e quale pulsante è stato usato per eliminarla. Non ha alcun effetto sul fatto che l'avviso venga eliminato.

L'avviso rimarrà visibile fino a quando non viene eliminato toccando un pulsante (se presente - non sono necessari) o si chiama [UIAlertView dismissWithClickedButtonIndex:animated] o il metodo (non documentato) dismiss dell'istanza di avviso.

Sembra (come ha suggerito Cobbal), l'avviso 2 viene visualizzato sull'avviso 1, si elimina l'avviso 2 e l'avviso 1 rimane lì (fino a quando non viene eliminato).

C'è un motivo particolare per cui vuoi mostrare un nuovo avviso mentre un altro è ancora visualizzato? Forse un altro contesto ci aiuterebbe ad arrivare alla radice del problema, che sospetto possa essere un problema di progettazione.

[modifica] tornando a questo e leggendo di nuovo, mi chiedo se quello che stai chiedendo con il metodo delegato è se dovresti mostrare l'avviso 2 da lì? Nel qual caso è probabilmente quello che vuoi, direttamente o indirettamente. Con indiretto intendo che potresti avere qualche stato impostato altrove che determina se deve essere mostrato l'avviso 2 (o le circostanze che lo portano). Questo stato (una bandiera, forse) potrebbe essere impostato quando si visualizza il primo avviso e cancellato quando l'allerta viene respinta (dal metodo delegato).

Il motivo per cui ciò accade è perché UIAlertView non si blocca mentre viene mostrato. Qualsiasi codice scritto dopo aver mostrato una visualizzazione di avviso verrà eseguito immediatamente dopo la visualizzazione dell'avviso.

Quello che dovresti avere sono due metodi diversi. Uno che fa qualcosa e poi mostra un avviso, e poi un altro che fa qualcosa e mostra un altro avviso.

Inizia il primo metodo per fare qualcosa e mostrare un avviso, quindi aggancia il metodo delegato dell'avviso e quando ricevi il callback dalla vista di avviso, esegui l'altro metodo.

In questo modo, la seconda parte del processo non avverrà fino a quando l'utente non avrà premuto OK sull'avviso nella prima parte del processo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top