So implementieren Sie ein Popup-Dialogfeld in iOS


303

Nach einer Berechnung möchte ich ein Popup- oder Warnfeld anzeigen, das dem Benutzer eine Nachricht übermittelt. Weiß jemand, wo ich weitere Informationen dazu finden kann?

Antworten:


517

Ja, a UIAlertViewist wahrscheinlich das, wonach Sie suchen. Hier ist ein Beispiel:

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

Wenn Sie etwas ausgefalleneres tun möchten, z. B. eine benutzerdefinierte Benutzeroberfläche in Ihrer anzeigen UIAlertView, können Sie eine Unterklasse erstellen UIAlertViewund benutzerdefinierte Benutzeroberflächenkomponenten in die initMethode einfügen. Wenn Sie auf einen Tastendruck nach dem UIAlertViewErscheinen von a reagieren möchten , können Sie die delegateoben genannten Einstellungen vornehmen und die - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexMethode implementieren .

Vielleicht möchten Sie sich auch die ansehen UIActionSheet.


45
In der Apple-Dokumentation heißt es: "Die UIAlertView-Klasse soll unverändert verwendet werden und unterstützt keine Unterklassen." developer.apple.com/library/ios/#documentation/uikit/reference/…
JOM

40
Nur ein Kommentar: Bei aktiviertem ARC wird die '[Alert Release]' nicht benötigt (zumindest sagt der Compiler dies).
Javier Sedano

4
Die Unterklasse von UIAlertView wird ab iOS 4 nicht mehr unterstützt
xySVerma

1
Hier ist ein Beispiel für eine einfache UIAlertView mit Delegat, wenn Sie auch die Schaltflächen Aktionen benötigen
guilherme.minglini

2
Wenn Sie nach einer schnellen Version suchen, lesen Sie die Antwort von Oscar Swanros
Rogerio Chaves

177

Unterschiedliche Personen, die zu dieser Frage kommen, meinen unterschiedliche Dinge mit einem Popup-Fenster. Ich empfehle dringend, die Dokumentation zu temporären Ansichten zu lesen . Meine Antwort ist größtenteils eine Zusammenfassung dieser und anderer verwandter Dokumentationen.

Alarm (zeig mir ein Beispiel)

Geben Sie hier die Bildbeschreibung ein

Warnungen zeigen einen Titel und eine optionale Nachricht an. Der Benutzer muss dies bestätigen (eine Ein-Tasten-Warnung) oder eine einfache Auswahl treffen (eine Zwei-Tasten-Warnung), bevor er fortfährt. Sie erstellen eine Warnung mit einem UIAlertController.

Es lohnt sich, die Warnungen und Ratschläge der Dokumentation zum Erstellen unnötiger Warnungen zu zitieren.

Geben Sie hier die Bildbeschreibung ein

Anmerkungen:

Aktionsblatt (zeigen Sie mir ein Beispiel)

Geben Sie hier die Bildbeschreibung ein

Aktionsblätter geben dem Benutzer eine Liste mit Auswahlmöglichkeiten. Sie werden je nach Größe und Ausrichtung des Geräts entweder am unteren Bildschirmrand oder in einem Popover angezeigt. Wie bei Warnungen aUIAlertController verwendet, um ein Aktionsblatt zu erstellen. Vor iOS 8 UIActionSheetwurde verwendet, aber jetzt heißt es in der Dokumentation :

Wichtig: UIActionSheet ist in iOS 8 UIActionSheetDelegateveraltet. (Beachten Sie, dass dies ebenfalls veraltet ist.) Verwenden Sie stattdessen zum Erstellen und Verwalten von Aktionsblättern in iOS 8 und höherUIAlertController eine preferredStylevon UIAlertControllerStyleActionSheet.

Modale Ansicht (zeig mir ein Beispiel)

Geben Sie hier die Bildbeschreibung ein

Eine modale Ansicht ist eine eigenständige Ansicht, die alles enthält, was zum Ausführen einer Aufgabe erforderlich ist. Es kann den ganzen Bildschirm einnehmen oder nicht. Verwenden Sie zum Erstellen einer modalen Ansicht a UIPresentationControllermit einem der modalen Präsentationsstile .

Siehe auch

Popover (zeig mir ein Beispiel)

Geben Sie hier die Bildbeschreibung ein

Ein Popover ist eine Ansicht, die angezeigt wird, wenn ein Benutzer auf etwas tippt, und verschwindet, wenn er darauf tippt. Es hat einen Pfeil, der das Steuerelement oder den Ort anzeigt, von dem aus das Tippen erfolgt ist. Der Inhalt kann fast alles sein, was Sie in einen View Controller einfügen können. Sie machen ein Popover mit einem UIPopoverPresentationController. (Vor iOS 8 UIPopoverControllerwar die empfohlene Methode.)

In der Vergangenheit waren Popover nur auf dem iPad verfügbar, aber ab iOS 8 können Sie sie auch auf einem iPhone herunterladen (siehe hier , hier und hier ).

Siehe auch

Benachrichtigungen

Geben Sie hier die Bildbeschreibung ein

Benachrichtigungen sind Geräusche / Vibrationen, Warnungen / Banner oder Abzeichen, die den Benutzer über etwas informieren, auch wenn die App nicht im Vordergrund ausgeführt wird.

Geben Sie hier die Bildbeschreibung ein

Siehe auch

Ein Hinweis zu Android Toasts

Geben Sie hier die Bildbeschreibung ein

In Android ein Toast eine Kurznachricht, die für kurze Zeit auf dem Bildschirm angezeigt wird und dann automatisch verschwindet, ohne die Benutzerinteraktion mit der App zu stören.

Leute mit Android-Hintergrund möchten wissen, was die iOS-Version eines Toasts ist. Einige Beispiele für diese Fragen finden Sie hier , hier , hier und hier . Die Antwort ist, dass es unter iOS kein Äquivalent zu einem Toast gibt . Verschiedene Problemumgehungen, die vorgestellt wurden, umfassen:

  • Machen Sie Ihre eigenen mit einer Unterklasse UIView
  • Importieren Sie ein Drittanbieterprojekt, das einen Toast nachahmt
  • Verwenden Sie einen Buttonless-Alert mit einem Timer

Mein Rat ist jedoch, sich an die Standardoptionen der Benutzeroberfläche zu halten, die bereits mit iOS geliefert werden. Versuchen Sie nicht, Ihre App so aussehen und sich genauso verhalten zu lassen wie die Android-Version. Überlegen Sie, wie Sie es neu verpacken können, damit es wie eine iOS-App aussieht und sich anfühlt.


3
Mit einem Hinweis zu Android Toast noch! Nett! Diese Informationen helfen neuen Entwicklern, die aus der Android-Entwicklung stammen. Danke dir!
Filipe Brito

3
Mann, ich muss das drucken und rahmen! Du hast mich gestern und heute wieder gerettet: D
finngu

58

Seit der Veröffentlichung von iOS 8 UIAlertViewist jetzt veraltet; UIAlertController ist der Ersatz.

Hier ist ein Beispiel, wie es in Swift aussieht:

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
}

Wie Sie sehen können, können wir mit der API Rückrufe sowohl für die Aktion als auch für die Präsentation der Warnung implementieren, was sehr praktisch ist!

Aktualisiert für 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 Sollte presentViewController eine schließende Klammer haben und was ist der Unterschied zwischen Ihrem Abschlussblock und dem Abschluss: Null?
Andrew Plummer

Es ist kein Unterschied. Wenn es einen Block zum Aufrufen gibt, wird er aufgerufen.
Entalpi

25

Aktualisiert für iOS 8.0

Seit iOS 8.0 müssen Sie UIAlertController wie folgt verwenden:

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

In meinem Beispiel ist self ein UIViewController, der die Methode "presentViewController" für ein Popup implementiert.

David


11

Für Swift 3 & Swift 4:

Da UIAlertView veraltet ist, gibt es eine gute Möglichkeit, Alert in Swift 3 anzuzeigen

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)

Veraltet:

Dies ist die schnelle Version, die von der überprüften Antwort inspiriert wurde:

AlertView anzeigen:

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

Fügen Sie den Delegaten Ihrem View Controller hinzu:

class AgendaViewController: UIViewController, UIAlertViewDelegate

Wenn der Benutzer auf die Schaltfläche klickt, wird dieser Code ausgeführt:

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


}

UIAlertView ist jetzt veraltet.
Parth Sane

7

Obwohl ich schon eine Übersicht geschrieben habe über verschiedene Arten von Popups geschrieben habe, benötigen die meisten Leute nur einen Alert.

So implementieren Sie ein Popup-Dialogfeld

Geben Sie hier die Bildbeschreibung ein

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

Meine ausführlichere Antwort ist hier .


0

Hier ist die C # -Version in Xamarin.iOS

var alert = new UIAlertView("Title - Hey!", "Message - Hello iOS!", null, "Ok");
alert.Show();
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.