566 Stimmen

Wie erstelle ich ein UIAlertView in Swift?

Ich habe daran gearbeitet, ein UIAlertView in Swift zu erstellen, aber aus irgendeinem Grund gelingt es mir nicht, die Anweisung richtig zu machen, weil ich diesen Fehler bekomme:

Konnte keine Überladung für 'init' finden, die die mitgelieferten Argumente akzeptiert

So habe ich es geschrieben:

let button2Alert: UIAlertView = UIAlertView(title: "Titel", message: "Nachricht",
                     delegate: self, cancelButtonTitle: "OK", otherButtonTitles: nil)

Dann rufe ich es so auf:

button2Alert.show()

Im Moment stürzt es ab und ich scheine einfach nicht die Syntax richtig hinzubekommen.

10voto

emreoktem Punkte 2147

Für SWIFT4 denke ich, dass das Erweitern von UIViewController und das Erstellen eines wiederverwendbaren Bestätigungssteuerelements der eleganteste Weg ist.

Sie können das UIViewController wie folgt erweitern:

extension UIViewController {

func AskConfirmation (title:String, message:String, completion:@escaping (_ result:Bool) -> Void) {
    let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
    self.present(alert, animated: true, completion: nil)

    alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { action in
        completion(true)
    }))

    alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { action in
        completion(false)
    }))
  }
}

Dann können Sie es jederzeit verwenden:

 AskConfirmation(title: "IHR NACHRICHTENTITEL", message: "IHRE NACHRICHT") { (result) in
        if result { //Der Benutzer hat auf Ok geklickt

        } else { //Der Benutzer hat auf Abbrechen geklickt

        }
    }

9voto

Mujah Maskey Punkte 8424

Ich habe dieses gefunden,

var alertView = UIAlertView();
alertView.addButtonWithTitle("Ok");
alertView.title = "title";
alertView.message = "message";
alertView.show();

nicht gut jedoch, aber es funktioniert :)

Aktualisierung:

aber ich habe in der Headerdatei gefunden:

extension UIAlertView {
    convenience init(title: String, message: String, delegate: UIAlertViewDelegate?, cancelButtonTitle: String?, otherButtonTitles firstButtonTitle: String, _ moreButtonTitles: String...)
}

jemand kann das vielleicht erklären.

7voto

Tilak Maddy Punkte 3427

Für iOS 13 Xcode 11+ Swift 5.X

UIAlertController kann jetzt sowohl Alerts als auch Action Sheets bereitstellen

Alerts

// Erstelle zuerst das UIAlertController

let alert = UIAlertController(title: "Titel",
                              message: "Nachricht ?",
                              preferredStyle: .alert)

 // Füge Aktionstasten hinzu und füge bei Bedarf Handler-Funktionen hinzu 

 alert.addAction(UIAlertAction(title: "Abbrechen", style: .cancel, handler: nil))
 alert.addAction(UIAlertAction(title: "Einfach machen!", style: .destructive, handler: nil))
 alert.addAction(UIAlertAction(title: "Vielleicht", style: .default, handler: nil))

// Zeige den Alert an, indem du ihn präsentierst

self.present(alert, animated: true)

Beachte, dass es eine grundlegende Eigenschaft für alle Aktionstasten ist, das Alert-Ansichtsfenster bei Berührung zu schließen. Der style Parameter dient lediglich zur Festlegung der Farbe des Textes (und einer Standardreihenfolge, in der die Schaltflächen angezeigt werden sollen, die natürlich geändert werden können)

Eine Beispielfunktion für den Handler könnte sein

func handler(_ action: UIAlertAction) { 

   if action.title == 'Titel' {
       // Mach etwas
   }

}

Als zusätzliche Anmerkung würde ich sagen, dass anstelle von 3 verschiedenen Handlern du nur einen erstellen kannst und auf das Element zurückverweisen kannst, das es provoziert hat, wie oben gezeigt Wir können auch alert.style überprüfen, aber wir können wieder mehrere .default gestylte Aktionen haben, das würde ich nicht empfehlen

Action Sheets

Die Erläuterung ist ähnlich, denn der Hauptunterschied hier ist, dass eine Alert-Ansicht den Benutzer unterbricht, während eine Action Sheet von unten auf einem iPhone hereinschiebt und auf einem iPad als Popover erscheint

Der Zweck von Action Sheets ist es, die Benutzer bei der Entscheidung ihrer Aktionen basierend auf ihrem aktuellen Zustand zu führen. Du musst also Action Sheets wie Kreuzungen behandeln! Es gibt im Allgemeinen keine Nachricht und der Titel wird als Text in Untertitelgröße dargestellt

let action = UIAlertController(title: "Was möchten Sie mit der Nachricht tun",
                               message: nil,
                               preferredStyle: .actionSheet)

action.addAction(UIAlertAction(title: "Abbrechen", style: .cancel)) 

for act in ["Speichern", "Veröffentlichen", "Verwerfen"] {  
          action.addAction(UIAlertAction(title: act, style: .default, handler: nil))
}

self.present(action, animated: true)

Der obige Code wird für ein iPhone funktionieren, aber wird zur Laufzeit für ein iPad abstürzen, weil UIPopoverPresentationController den Alert übernehmen wird und zu diesem Zeitpunkt auf nichts verweisen wird. Um dies zu vermeiden, musst du den folgenden Code bereitstellen, das ist obligatorisch

if let pop = action.popoverPresentationController {

     let v = sender as! UIView 
     pop.sourceView = v 
     pop.sourceRect = v.bounds
 }

Außerdem wird bei einem iPad durch Tippen irgendwo außerhalb des Popovers dieses geschlossen und der Abschluss-Handler der .cancel Aktionstaste wird aufgerufen.

Hoffentlich hilft das :) Wenn du dennoch Zweifel hast, kommentiere unten

5voto

Swinny89 Punkte 7093

Ich habe eine Singleton-Klasse erstellt, um es bequem von überall in Ihrer App zu verwenden: https://github.com/Swinny1989/Swift-Popups

Sie können dann ein Popup mit mehreren Buttons wie folgt erstellen:

Popups.SharedInstance.ShowAlert(self, title: "Titel hier eingeben", message: "Nachricht hier eingeben", buttons: ["Button eins", "Button zwei"]) { (buttonPressed) -> Void in
    if buttonPressed == "Button eins" { 
      //Code hier
    } else if buttonPressed == "Button zwei" {
        // Code hier
    }
}

oder Popups mit einem einzelnen Button wie folgt:

Popups.SharedInstance.ShowPopup("Titel hier eingeben", message: "Nachricht hier eingeben.")

5voto

Swift 3

Im Folgenden finden Sie ein einfaches Beispiel, wie Sie mit Swift 3 eine einfache Benachrichtigung mit einer Schaltfläche erstellen können.

let alert = UIAlertController(title: "Titel",
                              message: "Nachricht",
                              preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .default))
present(alert, animated: true)

In dem obigen Beispiel wurde der Handle-Callback der Aktion weggelassen, da das Standardverhalten einer Benachrichtigungsansicht mit einer Schaltfläche ist, dass sie verschwindet, wenn die Schaltfläche gedrückt wird.

Hier ist, wie Sie eine weitere Aktion erstellen können, die der Benachrichtigung mit "alert.addAction(action)" hinzugefügt werden könnte. Die verschiedenen Stile sind .default, .destructive und .cancel.

let action = UIAlertAction(title: "Ok", style: .default) { action in
    // Behandeln, wenn die Schaltfläche gedrückt wird
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X