Ajout d'un UIAlertView simple

108

Quel est le code de démarrage que je pourrais utiliser pour créer un UIAlertView simple avec un bouton "OK" dessus?

Linuxmint
la source
Voulez-vous attendre pour effectuer une action jusqu'à ce que vous cliquiez sur le bouton OK?
sudo rm -rf
1
@sudo rm -rf: Non, j'en ai juste besoin pour dire "Dee dee doo doo" ou quelque chose comme ça. Aucune action requise.
Linuxmint

Réponses:

230

Lorsque vous souhaitez que l'alerte s'affiche, procédez comme suit:

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

Si vous voulez faire quelque chose lorsque vous cliquez sur le bouton, implémentez cette méthode de délégué:

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

Et assurez-vous que votre délégué est conforme au UIAlertViewDelegateprotocole:

@interface YourViewController : UIViewController <UIAlertViewDelegate> 
sudo rm -rf
la source
4
vous pouvez utiliser des balises si vous disposez de plusieurs vues d'alerte pour déterminer qui a appelé le délégué.
Pnar Sbi Wer
71

D'autres réponses fournissent déjà des informations pour iOS 7 et versions antérieures, mais UIAlertViewsont obsolètes dans iOS 8 .

Dans iOS 8+, vous devez utiliser UIAlertController. Il remplace les deux UIAlertViewet UIActionSheet. Documentation: Référence de classe UIAlertController . Et un bel article sur NSHipster .

Pour créer une vue d'alerte simple, vous pouvez effectuer les opérations suivantes:

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)

Notez que, depuis qu'il a été ajouté dans iOS 8, ce code ne fonctionnera pas sur iOS 7 et les versions antérieures. Donc, malheureusement, pour l'instant, nous devons utiliser des vérifications de version comme ceci:

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: mis à jour pour Swift 5. Remplacement du contrôle de présence de classe obsolète par le contrôle de disponibilité dans Obj-C.

FreeNickname
la source
1
Vous ne devriez pas publier de code qui pourrait fonctionner mais qui ne fonctionne pas. Au lieu d'utiliser MyOwnUtilsClass, écrivez simplement le code qui vérifie la version ios.
csharpwinphonexaml
1
@csharpwinphonexaml, je ne suis pas d'accord. Ce serait une complication inutile du code. La version actuelle illustre l'utilisation d'UIAlerView / UIAlertController, tandis que la vérification de la version du système n'est pas le sujet de cette question. Dans Swift, il existe une méthode intégrée de vérification de la version du système d'exploitation en une ligne, je l'ai donc utilisée. Objective-C a plusieurs méthodes, mais aucune d'elles n'est élégante.
FreeNickname
1
Je l'ai dit parce que je sais que tout le monde n'est pas expert pour comprendre chaque morceau de code et savoir comment le remplacer par un code fonctionnel.
csharpwinphonexaml
10

UIAlertView est obsolète sur iOS 8. Par conséquent, pour créer une alerte sur iOS 8 et supérieur, il est recommandé d'utiliser 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];

C'est ainsi que je l'ai implémenté.

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

 [alert show];
 [alert autorelease];
Evan Mulawski
la source
9
UIAlertView *myAlert = [[UIAlertView alloc] 
                         initWithTitle:@"Title"
                         message:@"Message"
                         delegate:self
                         cancelButtonTitle:@"Cancel"
                         otherButtonTitles:@"Ok",nil];
[myAlert show];
Brynner Ferreira
la source
9

En complément des deux réponses précédentes (de l'utilisateur "sudo rm -rf" et "Evan Mulawski"), si vous ne voulez rien faire lorsque vous cliquez sur votre vue d'alerte, vous pouvez simplement l'allouer, l'afficher et la libérer. Vous n'avez pas à déclarer le protocole délégué.

Di Wu
la source
3

Voici une méthode complète qui n'a qu'un seul bouton, un 'ok', pour fermer 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];
}
MGM
la source
1

Cette page montre comment ajouter un UIAlertController si vous utilisez Swift.

eau de rose
la source
0

Alerte simple avec des données de tableau:

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];
Bhupendrasingh Lohar
la source
-1

Pour 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)
Nyakiba
la source