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.

1012voto

Oscar Swanros Punkte 19737

Von der UIAlertView Klasse:

// UIAlertView ist veraltet. Verwenden Sie UIAlertController mit einem preferredStyle von UIAlertControllerStyleAlert stattdessen

Auf iOS 8 können Sie Folgendes tun:

let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Klicken", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)

Jetzt ist UIAlertController eine einzige Klasse zur Erstellung und Interaktion mit dem, was wir als UIAlertViews und UIActionSheets auf iOS 8 kannten.

Bearbeiten: Um Aktionen zu behandeln:

alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { action in
    switch action.style{
    case .Default:
        print("default")

    case .Cancel:
        print("cancel")

    case .Destructive:
        print("destructive")
    }
}}))

Bearbeiten für Swift 3:

let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)

Bearbeiten für Swift 4.x:

let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
    switch action.style{
        case .default:
        print("default")

        case .cancel:
        print("cancel")

        case .destructive:
        print("destructive")

    }
}))
self.present(alert, animated: true, completion: nil)

562voto

Suragch Punkte 420096

Eine Schaltfläche

Screenshot einer Schaltfläche

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(_ sender: UIButton) {

        // erstelle den Alarm
        let alert = UIAlertController(title: "Mein Titel", message: "Dies ist meine Nachricht.", preferredStyle: UIAlertController.Style.alert)

        // füge eine Aktion (Schaltfläche) hinzu
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))

        // zeige den Alarm an
        self.present(alert, animated: true, completion: nil)
    }
}

Zwei Schaltflächen

Screenshot für zwei Schaltflächen Alarm

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(_ sender: UIButton) {

        // erstelle den Alarm
        let alert = UIAlertController(title: "UIAlertController", message: "Möchten Sie weiterlernen, wie man iOS-Alarme verwendet?", preferredStyle: UIAlertController.Style.alert)

        // füge die Aktionen (Schaltflächen) hinzu
        alert.addAction(UIAlertAction(title: "Weiter", style: UIAlertAction.Style.default, handler: nil))
        alert.addAction(UIAlertAction(title: "Abbrechen", style: UIAlertAction.Style.cancel, handler: nil))

        // zeige den Alarm an
        self.present(alert, animated: true, completion: nil)
    }
}

Drei Schaltflächen

Bildbeschreibung eingeben

class ViewController: UIViewController {

    @IBAction func showAlertButtonTapped(_ sender: UIButton) {

        // erstelle den Alarm
        let alert = UIAlertController(title: "Hinweis", message: "Das Abschießen dieser Rakete wird das gesamte Universum zerstören. Ist das, was Sie beabsichtigen?", preferredStyle: UIAlertController.Style.alert)

        // füge die Aktionen (Schaltflächen) hinzu
        alert.addAction(UIAlertAction(title: "Erinnere mich morgen", style: UIAlertAction.Style.default, handler: nil))
        alert.addAction(UIAlertAction(title: "Abbrechen", style: UIAlertAction.Style.cancel, handler: nil))
        alert.addAction(UIAlertAction(title: "Rakete abschießen", style: UIAlertAction.Style.destructive, handler: nil))

        // zeige den Alarm an
        self.present(alert, animated: true, completion: nil)
    }
}

Behandlung von Schaltflächenklicks

Der handler war in den obigen Beispielen nil. Sie können nil durch einen Closure ersetzen, um etwas zu tun, wenn der Benutzer auf eine Schaltfläche tippt. Zum Beispiel:

alert.addAction(UIAlertAction(title: "Rakete abschießen", style: UIAlertAction.Style.destructive, handler: { action in

    // etwas tun wie...
    self.launchMissile()

}))

Notizen

  • Mehrere Schaltflächen müssen nicht unbedingt verschiedene UIAlertAction.Style Typen verwenden. Sie könnten alle .default sein.
  • Für mehr als drei Schaltflächen kann die Verwendung eines Action Sheets in Betracht gezogen werden. Die Einrichtung ist sehr ähnlich. Hier ist ein Beispiel.

117voto

Ben Gottlieb Punkte 84876

Sie können ein UIAlert mithilfe des Standardkonstruktors erstellen, aber der "Legacy"-Konstruktor scheint nicht zu funktionieren:

let alert = UIAlertView()
alert.title = "Alarm"
alert.message = "Hier ist eine Nachricht"
alert.addButtonWithTitle("Verstanden")
alert.show()

51voto

Naresh Punkte 14268

In Swift 4.2 and Xcode 10

Methode 1 :

EINFACHE ALERT

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

     let ok = UIAlertAction(title: "OK", style: .default, handler: { action in
     })
     alert.addAction(ok)
     let cancel = UIAlertAction(title: "Abbrechen", style: .default, handler: { action in
     })
     alert.addAction(cancel)
     DispatchQueue.main.async(execute: {
        self.present(alert, animated: true)
})

Methode 2 :

ALERT MIT GETEILTER KLASSE

Wenn Sie den geteilten Klassenstil möchten (einmal schreiben, überall verwenden)

import UIKit
class SharedClass: NSObject {//Dies ist eine gemeinsame Klasse
static let sharedInstance = SharedClass()

    //Alert anzeigen
    func alert(view: UIViewController, title: String, message: String) {
        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let defaultAction = UIAlertAction(title: "OK", style: .default, handler: { action in
        })
        alert.addAction(defaultAction)
        DispatchQueue.main.async(execute: {
            view.present(alert, animated: true)
        })
    }

    private override init() {
    }
}

Rufen Sie jetzt das Alert wie folgt überall auf

SharedClass.sharedInstance.alert(view: self, title: "Ihr Titel hier", message: "Ihre Nachricht hier")

Methode 3 :

PRÄSENTIEREN EINES ALERTS ÜBER ALLEN FENSTERN

Wenn Sie einen Alert über allen Ansichten präsentieren möchten, verwenden Sie diesen Code

func alertWindow(title: String, message: String) {
    DispatchQueue.main.async(execute: {
        let alertWindow = UIWindow(frame: UIScreen.main.bounds)
        alertWindow.rootViewController = UIViewController()
        alertWindow.windowLevel = UIWindowLevelAlert + 1

        let alert2 = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let defaultAction2 = UIAlertAction(title: "OK", style: .default, handler: { action in
        })
        alert2.addAction(defaultAction2)

        alertWindow.makeKeyAndVisible()

        alertWindow.rootViewController?.present(alert2, animated: true, completion: nil)
    })
}

Funktionsaufruf

SharedClass.sharedInstance.alertWindow(title:"Dies ist Ihr Titel", message:"Dies ist Ihre Nachricht")

Methode 4 :

Alert mit Erweiterung

extension  UIViewController {

    func showAlert(withTitle title: String, withMessage message:String) {
        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let ok = UIAlertAction(title: "OK", style: .default, handler: { action in
        })
        let cancel = UIAlertAction(title: "Abbrechen", style: .default, handler: { action in
        })
        alert.addAction(ok)
        alert.addAction(cancel)
        DispatchQueue.main.async(execute: {
            self.present(alert, animated: true)
        })
    }
}

Rufen Sie jetzt so auf

//Rufen Sie die showAlert-Funktion in Ihrer Klasse auf
@IBAction func onClickAlert(_ sender: UIButton) {
    showAlert(withTitle:"Ihr Titel hier", withMessage: "Ihre benutzerdefinierte Nachricht hier")
}

Methode 5 :

ALERT MIT TEXTFELDERN

Wenn Sie Textfelder zum Alert hinzufügen möchten.

//Globale Variablen
var name:String?
var login:String?

//Rufen Sie diese Funktion wie folgt auf:  alertWithTF() 
//Fügen Sie Textfelder zum Alert hinzu 
func alertWithTF() {

    let alert = UIAlertController(title: "Login", message: "Benutzernamen & Passwort eingeben", preferredStyle: .alert)
    // Login-Schaltfläche
    let loginAction = UIAlertAction(title: "Einloggen", style: .default, handler: { (action) -> Void in
        // Text der Textfelder abrufen
        let usernameTxt = alert.textFields![0]
        let passwordTxt = alert.textFields![1]
        //Weisen Sie die Textfelder für unseren globalen Variablen zu
        self.name = usernameTxt.text
        self.login = passwordTxt.text

        print("BENUTZERNAME: \(self.name!)\nPASSWORT: \(self.login!)")
    })

    // Abbrechen-Schaltfläche
    let cancel = UIAlertAction(title: "Abbrechen", style: .destructive, handler: { (action) -> Void in })

    //1 Textfeld für Benutzername
    alert.addTextField { (textField: UITextField) in
        textField.placeholder = "Benutzernamen eingeben"
        //Wenn erforderlich, geben Sie Tastaturtyp, Delegierte, Textgröße, Schrift usw. an...
        //Zum Beispiel:
        textField.keyboardType = .default
    }

    //2. Textfeld für Passwort
    alert.addTextField { (textField: UITextField) in
        textField.placeholder = "Passwort eingeben"
        textField.isSecureTextEntry = true
    }

    // Aktionen hinzufügen
    alert.addAction(loginAction)
    alert.addAction(cancel)
    self.present(alert, animated: true, completion: nil)

}

Methode 6:

Alert in SharedClass mit Erweiterung

//Das ist Ihre gemeinsame Klasse
import UIKit

 class SharedClass: NSObject {

 static let sharedInstance = SharedClass()

 //Hier Ihren Code schreiben....

 private override init() {
 }
}

//Alert-Funktion in der gemeinsamen Klasse
extension UIViewController {
    func showAlert(title: String, msg: String) {
        DispatchQueue.main.async {
            let alert = UIAlertController(title: title, message: msg, preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
            self.present(alert, animated: true, completion: nil)
        }
    }
}

Rufen Sie jetzt direkt so auf

self.showAlert(title: "Ihr Titel hier...", msg: "Ihre Nachricht hier...")

Methode 7:

Alert ohne gemeinsame Klasse mit Erweiterung in separater Klasse für Alert.

Erstellen Sie eine neue Swift-Klasse und import UIKit. Kopieren und fügen Sie den folgenden Code ein.

//Dies ist Ihre neue Swift-Klassen-Datei
import UIKit
import Foundation

extension UIAlertController {
    class func alert(title:String, msg:String, target: UIViewController) {
        let alert = UIAlertController(title: title, message: msg, preferredStyle: UIAlertControllerStyle.alert)
        alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default) {
        (result: UIAlertAction) -> Void in
        })
        target.present(alert, animated: true, completion: nil)
    }
}

Rufen Sie jetzt die Alert-Funktion in all Ihren Klassen auf (Einzeilig).

UIAlertController.alert(title:"Titel", msg:"Nachricht", target: self)

Wie ist es....

20voto

Hiren Patel Punkte 50526

Klick auf Ansicht

@IBAction func testClick(sender: UIButton) {

  var uiAlert = UIAlertController(title: "Titel", message: "Nachricht", preferredStyle: UIAlertControllerStyle.Alert)
  self.presentViewController(uiAlert, animated: true, completion: nil)

  uiAlert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { action in
   println("Klick auf Standard-Schaltfläche")
  }))

  uiAlert.addAction(UIAlertAction(title: "Abbrechen", style: .Cancel, handler: { action in
   println("Klick auf Abbrechen-Schaltfläche")
  }))

}

Fertig mit zwei Schaltflächen OK & Abbrechen

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