Hinzufügen einer einfachen UIAlertView


108

Welchen Startercode könnte ich verwenden, um eine einfache UIAlertView mit einer "OK" -Schaltfläche zu erstellen?


Möchten Sie warten, um eine Aktion auszuführen, bis Sie auf die Schaltfläche OK klicken?
Sudo rm -rf

1
@sudo rm -rf: Nein, ich brauche es nur, um "Dee dee doo doo" oder so etwas zu sagen. Keine Aktionen erforderlich.
Linuxmint

Antworten:


230

Wenn die Warnung angezeigt werden soll, gehen Sie folgendermaßen vor:

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

Wenn Sie beim Klicken auf die Schaltfläche etwas tun möchten, implementieren Sie diese Delegatenmethode:

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

Und stellen Sie sicher, dass Ihr Delegierter dem UIAlertViewDelegateProtokoll entspricht :

@interface YourViewController : UIViewController <UIAlertViewDelegate> 

4
Sie können Tags verwenden, wenn Sie mehr als eine Warnansicht haben, um zu bestimmen, wer den Delegaten angerufen hat.
Pnar Sbi Wer

71

Andere Antworten enthalten bereits Informationen für iOS 7 und älter, sind jedoch UIAlertViewin iOS 8 veraltet .

In iOS 8+ sollten Sie verwenden UIAlertController. Es ist ein Ersatz für beide UIAlertViewund UIActionSheet. Dokumentation: UIAlertController-Klassenreferenz . Und ein schöner Artikel über NSHipster .

Um eine einfache Warnungsansicht zu erstellen, haben Sie folgende Möglichkeiten:

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

Schnelles 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)

Beachten Sie, dass dieser Code, da er in iOS 8 hinzugefügt wurde, unter iOS 7 und älter nicht funktioniert. Leider müssen wir jetzt Versionsprüfungen wie folgt durchführen:

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

Schnelles 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: aktualisiert für Swift 5. Ersetzte veraltete Klassenpräsenzprüfung durch Verfügbarkeitsprüfung in Obj-C.


1
Sie sollten keine Postleitzahl posten, die funktionieren könnte, aber nicht. Anstatt MyOwnUtilsClass zu verwenden, schreiben Sie einfach den Code, der die ios-Version überprüft.
Csharpwinphonexaml

1
@csharpwinphonexaml, ich bin nicht einverstanden. Es wäre eine unnötige Komplikation des Codes. Die aktuelle Version veranschaulicht die Verwendung von UIAlerView / UIAlertController, während die Überprüfung der Systemversion nicht Gegenstand dieser Frage ist. In Swift gibt es eine integrierte einzeilige Methode zum Überprüfen der Betriebssystemversion, daher habe ich sie verwendet. Objective-C hat mehrere Methoden, aber keine davon ist elegant.
FreeNickname

1
Ich habe es gesagt, weil ich weiß, dass nicht jeder Experte darin ist, jeden Code zu verstehen und zu wissen, wie man ihn durch einen funktionierenden ersetzt.
Csharpwinphonexaml

10

UIAlertView ist unter iOS 8 veraltet. Um eine Warnung unter iOS 8 und höher zu erstellen, wird empfohlen, UIAlertController zu verwenden:

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

So habe ich es umgesetzt.


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

Als Ergänzung zu den beiden vorherigen Antworten (von Benutzer "sudo rm -rf" und "Evan Mulawski") können Sie, wenn Sie beim Klicken auf Ihre Warnansicht nichts tun möchten, diese einfach zuweisen, anzeigen und freigeben. Sie müssen das Delegatenprotokoll nicht deklarieren.


3

Hier ist eine vollständige Methode, die nur eine Schaltfläche hat, ein 'OK', um den UIAlert zu schließen:

- (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

Einfache Warnung mit Array-Daten:

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

Für 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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.