come implementare una finestra di dialogo pop-up in iOS


303

Dopo un calcolo, voglio visualizzare una finestra pop-up o di avviso che trasmette un messaggio all'utente. Qualcuno sa dove posso trovare ulteriori informazioni su questo?

Risposte:


517

Sì, a UIAlertViewè probabilmente quello che stai cercando. Ecco un esempio:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No network connection" 
                                                message:@"You must be connected to the internet to use this app." 
                                               delegate:nil 
                                      cancelButtonTitle:@"OK"
                                      otherButtonTitles:nil];
[alert show];
[alert release];

Se vuoi fare qualcosa di più fantasioso, supponi di visualizzare un'interfaccia utente personalizzata nella tua UIAlertView, puoi sottoclassare UIAlertViewe inserire componenti dell'interfaccia utente personalizzati nel initmetodo. Se si desidera rispondere alla pressione di un pulsante dopo che UIAlertViewappare un , è possibile impostare quanto delegatesopra e implementare- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex metodo.

Potresti anche voler guardare il UIActionSheet.


45
La documentazione di Apple afferma che "La classe UIAlertView deve essere utilizzata così com'è e non supporta la sottoclasse". developer.apple.com/library/ios/#documentation/uikit/reference/…
JOM

40
Solo un commento: con ARC abilitato, il "[rilascio di avviso]" non è necessario (almeno, lo dice il compilatore).
Javier Sedano,

4
La sottoclasse di UIAlertView non è supportata da iOS 4 in poi
xySVerma,

1
Ecco un esempio di un semplice UIAlertView con delegato, se hai anche bisogno delle azioni dei pulsanti
guilherme.minglini

2
Se stai cercando una versione rapida, controlla la risposta di Oscar Swanros
Rogerio Chaves,

177

Diverse persone che vengono a questa domanda significano cose diverse da una finestra popup. Consiglio vivamente di leggere la documentazione di Viste temporanee . La mia risposta è in gran parte un riassunto di questa e altra documentazione correlata.

Avviso (mostrami un esempio)

inserisci qui la descrizione dell'immagine

Gli avvisi visualizzano un titolo e un messaggio opzionale. L'utente deve riconoscerlo (un avviso a un pulsante) o fare una semplice scelta (un avviso a due pulsanti) prima di continuare. Si crea un avviso con a UIAlertController.

Vale la pena citare gli avvertimenti e i consigli della documentazione sulla creazione di allarmi non necessari.

inserisci qui la descrizione dell'immagine

Appunti:

Foglio d'azione (mostrami un esempio)

inserisci qui la descrizione dell'immagine

I fogli di azione offrono all'utente un elenco di scelte. Appaiono nella parte inferiore dello schermo o in una sosta a seconda delle dimensioni e dell'orientamento del dispositivo. Come per gli avvisi, a UIAlertControllerviene utilizzato per creare un foglio di azione. Prima di iOS 8, UIActionSheetveniva utilizzato, ma ora la documentazione dice:

Importante: UIActionSheet è deprecato in iOS 8. (Nota che UIActionSheetDelegateè anche deprecato.) Per creare e gestire fogli di azione in iOS 8 e versioni successive, utilizzare invece UIAlertControllercon un preferredStyleof UIAlertControllerStyleActionSheet.

Vista modale (mostrami un esempio)

inserisci qui la descrizione dell'immagine

Una vista modale è una vista autonoma che ha tutto il necessario per completare un'attività. Potrebbe occupare o meno lo schermo intero. Per creare una vista modale, utilizzare a UIPresentationControllercon uno degli stili di presentazione modali .

Guarda anche

Popover (mostrami un esempio)

inserisci qui la descrizione dell'immagine

Un Popover è una vista che appare quando un utente tocca qualcosa e scompare quando lo tocca. Ha una freccia che mostra il controllo o la posizione da cui è stato effettuato il tocco. Il contenuto può essere qualsiasi cosa tu possa inserire in un controller di visualizzazione. Fai una sosta con a UIPopoverPresentationController. (Prima di iOS 8,UIPopoverController era il metodo consigliato.)

In passato i popover erano disponibili solo su iPad, ma a partire da iOS 8 puoi anche ottenerli su un iPhone (vedi qui , qui e qui ).

Guarda anche

notifiche

inserisci qui la descrizione dell'immagine

Le notifiche sono suoni / vibrazioni, avvisi / banner o badge che avvisano l'utente di qualcosa anche quando l'app non è in esecuzione in primo piano.

inserisci qui la descrizione dell'immagine

Guarda anche

Una nota sui toast Android

inserisci qui la descrizione dell'immagine

In Android, un Toast è un breve messaggio che viene visualizzato sullo schermo per un breve periodo di tempo e poi scompare automaticamente senza interrompere l'interazione dell'utente con l'app.

Le persone che provengono da uno sfondo Android vogliono sapere qual è la versione iOS di un Toast. Alcuni esempi di queste domande possono essere trovati qui , qui , qui e qui . La risposta è che non esiste un equivalente di un Toast in iOS . Varie soluzioni alternative che sono state presentate includono:

  • Crea il tuo con una sottoclasse UIView
  • Importa un progetto di terze parti che imita un Toast
  • Utilizzare un avviso senza pulsanti con un timer

Tuttavia, il mio consiglio è di attenersi alle opzioni dell'interfaccia utente standard già disponibili con iOS. Non tentare di rendere l'aspetto della tua app e comportarsi esattamente come la versione di Android. Pensa a come riconfezionarlo in modo che appaia e si senta come un'app iOS.


3
Con una nota su Android Toast ancora! Bello! Queste informazioni aiutano i nuovi sviluppatori che provengono dallo sviluppo di Android. Grazie!
Filipe Brito,

3
Amico, devo stamparlo e incorniciarlo! Mi hai salvato ieri e oggi di nuovo: D
finngu il

58

Dal rilascio di iOS 8, UIAlertViewora è obsoleto; UIAlertController è la sostituzione.

Ecco un esempio di come appare in Swift:

let alert = UIAlertController(title: "Hello!", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
let alertAction = UIAlertAction(title: "OK!", style: UIAlertActionStyle.default)
{
    (UIAlertAction) -> Void in
}
alert.addAction(alertAction)
present(alert, animated: true)
{
    () -> Void in
}

Come puoi vedere, l'API ci consente di implementare i callback sia per l'azione sia quando presentiamo l'avviso, il che è abbastanza utile!

Aggiornato per Swift 4.2

let alert = UIAlertController(title: "Hello!", message: "Message", preferredStyle: UIAlertController.Style.alert)
let alertAction = UIAlertAction(title: "OK!", style: UIAlertAction.Style.default)
        {
            (UIAlertAction) -> Void in
        }
        alert.addAction(alertAction)
        present(alert, animated: true)
        {
            () -> Void in
        }

@Entalpi presentViewController dovrebbe avere una parentesi graffa di chiusura e qual è la differenza tra il blocco di completamento e il solo completamento: zero?
Andrew Plummer,

Non fa differenza. Esiste un blocco per chiamarlo verrà chiamato.
Entalpi,

25

Aggiornato per iOS 8.0

Da iOS 8.0, dovrai utilizzare UIAlertController come segue:

-(void)alertMessage:(NSString*)message
{
    UIAlertController* alert = [UIAlertController
          alertControllerWithTitle:@"Alert"
          message:message
          preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction* defaultAction = [UIAlertAction 
          actionWithTitle:@"OK" style:UIAlertActionStyleDefault
         handler:^(UIAlertAction * action) {}];

    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
}

Dove self nel mio esempio è un UIViewController, che implementa il metodo "presentViewController" per un popup.

David


11

Per Swift 3 e Swift 4:

Poiché UIAlertView è obsoleto, esiste un buon metodo per visualizzare Alert su Swift 3

let alertController = UIAlertController(title: NSLocalizedString("No network connection",comment:""), message: NSLocalizedString("connected to the internet to use this app.",comment:""), preferredStyle: .alert)
let defaultAction = UIAlertAction(title:     NSLocalizedString("Ok", comment: ""), style: .default, handler: { (pAlert) in
                //Do whatever you want here
        })
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)

Obsoleto:

Questa è la versione rapida ispirata alla risposta selezionata:

Visualizza AlertView:

   let alert = UIAlertView(title: "No network connection", 
                           message: "You must be connected to the internet to use this app.", delegate: nil, cancelButtonTitle: "Ok")
    alert.delegate = self
    alert.show()

Aggiungi il delegato al controller della vista:

class AgendaViewController: UIViewController, UIAlertViewDelegate

Quando l'utente fa clic sul pulsante, questo codice verrà eseguito:

func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {


}

UIAlertView è ora obsoleto.
Parth Sane,

7

Anche se ho già scritto una panoramica di diversi tipi di popup, la maggior parte delle persone ha solo bisogno di un avviso.

Come implementare una finestra di dialogo popup

inserisci qui la descrizione dell'immagine

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(_ sender: UIButton) {

        // create the alert
        let alert = UIAlertController(title: "My Title", message: "This is my message.", preferredStyle: UIAlertController.Style.alert)

        // add an action (button)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))

        // show the alert
        self.present(alert, animated: true, completion: nil)
    }
}

La mia risposta più completa è qui .


0

Ecco la versione C # in Xamarin.iOS

var alert = new UIAlertView("Title - Hey!", "Message - Hello iOS!", null, "Ok");
alert.Show();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.