Aggiunta di un semplice UIAlertView


108

Qual è un codice di avviamento che potrei usare per creare un semplice UIAlertView con un pulsante "OK" su di esso?


Attendere per eseguire un'azione finché non si fa clic sul pulsante OK?
sudo rm -rf

1
@sudo rm -rf: No, ho solo bisogno che dica "Dee dee doo doo" o qualcosa del genere. Nessuna azione necessaria.
Linuxmint

Risposte:


230

Quando vuoi che venga visualizzato l'avviso, procedi come segue:

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"ROFL" 
                                                    message:@"Dee dee doo doo." 
                                                    delegate:self 
                                                    cancelButtonTitle:@"OK" 
                                                    otherButtonTitles:nil];
[alert show];

    // If you're not using ARC, you will need to release the alert view.
    // [alert release];

Se vuoi fare qualcosa quando si fa clic sul pulsante, implementa questo metodo delegato:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    // the user clicked OK
    if (buttonIndex == 0) {
        // do something here...
    }
}

E assicurati che il tuo delegato sia conforme al UIAlertViewDelegateprotocollo:

@interface YourViewController : UIViewController <UIAlertViewDelegate> 

4
è possibile utilizzare i tag se si dispone di più di 1 visualizzazioni di avviso per determinare chi ha chiamato il delegato.
Pnar Sbi Wer

71

Altre risposte forniscono già informazioni per iOS 7 e versioni precedenti, tuttavia UIAlertViewsono deprecate in iOS 8 .

In iOS 8+ dovresti usare UIAlertController. È un sostituto per entrambi UIAlertViewe UIActionSheet. Documentazione: riferimento alla classe UIAlertController . E un bell'articolo su NSHipster .

Per creare una semplice visualizzazione degli avvisi puoi procedere come segue:

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title"
                                                                         message:@"Message"
                                                                  preferredStyle:UIAlertControllerStyleAlert];
//We add buttons to the alert controller by creating UIAlertActions:
UIAlertAction *actionOk = [UIAlertAction actionWithTitle:@"Ok"
                                                   style:UIAlertActionStyleDefault
                                                 handler:nil]; //You can use a block here to handle a press on this button
[alertController addAction:actionOk];
[self presentViewController:alertController animated:YES completion:nil];

Swift 3/4/5:

let alertController = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert)
//We add buttons to the alert controller by creating UIAlertActions:
let actionOk = UIAlertAction(title: "OK",
    style: .default,
    handler: nil) //You can use a block here to handle a press on this button

alertController.addAction(actionOk)

self.present(alertController, animated: true, completion: nil)

Nota che, poiché è stato aggiunto in iOS 8, questo codice non funzionerà su iOS 7 e versioni precedenti. Quindi, purtroppo, per ora dobbiamo usare i controlli di versione in questo modo:

NSString *alertTitle = @"Title";
NSString *alertMessage = @"Message";
NSString *alertOkButtonText = @"Ok";

if (@available(iOS 8, *)) {
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:alertTitle
                                                        message:alertMessage
                                                       delegate:nil
                                              cancelButtonTitle:nil
                                              otherButtonTitles:alertOkButtonText, nil];
    [alertView show];
}
else {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:alertTitle
                                                                             message:alertMessage
                                                                      preferredStyle:UIAlertControllerStyleAlert];
    //We add buttons to the alert controller by creating UIAlertActions:
    UIAlertAction *actionOk = [UIAlertAction actionWithTitle:alertOkButtonText
                                                       style:UIAlertActionStyleDefault
                                                     handler:nil]; //You can use a block here to handle a press on this button
    [alertController addAction:actionOk];
    [self presentViewController:alertController animated:YES completion:nil];
}

Swift 3/4/5:

let alertTitle = "Title"
let alertMessage = "Message"
let alertOkButtonText = "Ok"

if #available(iOS 8, *) {
    let alertController = UIAlertController(title: alertTitle, message: alertMessage, preferredStyle: .alert)
    //We add buttons to the alert controller by creating UIAlertActions:
    let actionOk = UIAlertAction(title: alertOkButtonText,
        style: .default,
        handler: nil) //You can use a block here to handle a press on this button

    alertController.addAction(actionOk)
    self.present(alertController, animated: true, completion: nil)
}
else {
    let alertView = UIAlertView(title: alertTitle, message: alertMessage, delegate: nil, cancelButtonTitle: nil, otherButtonTitles: alertOkButtonText)
    alertView.show()
}

UPD: aggiornato per Swift 5. Sostituito il controllo della presenza della classe obsoleto con il controllo della disponibilità in Obj-C.


1
Non dovresti inserire un codice che potrebbe funzionare ma non lo fa. Invece di usare MyOwnUtilsClass, scrivi semplicemente il codice che controlla la versione di iOS.
csharpwinphonexaml

1
@csharpwinphonexaml, non sono d'accordo. Sarebbe una complicazione inutile del codice. La versione corrente illustra l'utilizzo di UIAlerView / UIAlertController, mentre il controllo della versione del sistema non è l'argomento di questa domanda. In Swift esiste un metodo integrato in una riga per controllare la versione del sistema operativo, quindi l'ho usato. Objective-C ha diversi metodi, ma nessuno di questi è elegante.
FreeNickname

1
L'ho detto perché so che non tutti sono esperti nel comprendere ogni pezzo di codice e nel saperlo sostituire con uno funzionante.
csharpwinphonexaml

10

UIAlertView è deprecato su iOS 8. Pertanto, per creare un avviso su iOS 8 e versioni successive, si consiglia di utilizzare UIAlertController:

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Title" message:@"Alert Message" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){

    // Enter code here
}];
[alert addAction:defaultAction];

// Present action where needed
[self presentViewController:alert animated:YES completion:nil];

Ecco come l'ho implementato.


9
UIAlertView *alert = [[UIAlertView alloc]
 initWithTitle:@"Title" 
 message:@"Message" 
 delegate:nil //or self
 cancelButtonTitle:@"OK"
 otherButtonTitles:nil];

 [alert show];
 [alert autorelease];

9
UIAlertView *myAlert = [[UIAlertView alloc] 
                         initWithTitle:@"Title"
                         message:@"Message"
                         delegate:self
                         cancelButtonTitle:@"Cancel"
                         otherButtonTitles:@"Ok",nil];
[myAlert show];

9

In aggiunta alle due risposte precedenti (dell'utente "sudo rm -rf" e "Evan Mulawski"), se non vuoi fare nulla quando si fa clic sulla visualizzazione degli avvisi, puoi semplicemente assegnarla, mostrarla e rilasciarla. Non è necessario dichiarare il protocollo delegato.


3

Ecco un metodo completo che ha solo un pulsante, un "ok", per chiudere l'UIAlert:

- (void) myAlert: (NSString*)errorMessage
{
    UIAlertView *myAlert = [[UIAlertView alloc]
                          initWithTitle:errorMessage
                          message:@""
                          delegate:self
                          cancelButtonTitle:nil
                          otherButtonTitles:@"ok", nil];
    myAlert.cancelButtonIndex = -1;
    [myAlert setTag:1000];
    [myAlert show];
}


0

Avviso semplice con dati array:

NSString *name = [[YourArray objectAtIndex:indexPath.row ]valueForKey:@"Name"];

NSString *msg = [[YourArray objectAtIndex:indexPath.row ]valueForKey:@"message"];

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:name
                                                message:msg
                                               delegate:self
                                      cancelButtonTitle:@"OK"
                                      otherButtonTitles:nil];
[alert show];

-1

Per Swift 3:

let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
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.