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.

12voto

knshn Punkte 3381

Mit den Protokollerweiterungen von Swift 2 können Sie ein Protokoll erstellen, das Ihren Ansichtscontrollern eine Standardimplementierung bereitstellt:

ShowsAlert.swift

import UIKit

protocol ShowsAlert {}

extension ShowsAlert where Self: UIViewController {
    func showAlert(title: String = "Fehler", message: String) {
        let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
        alertController.addAction(UIAlertAction(title: "Ok", style: .Default, handler: nil))
        presentViewController(alertController, animated: true, completion: nil)
    }
}

ViewController.swift

class ViewController: UIViewController, ShowsAlert {
    override func viewDidLoad() {
        super.viewDidLoad()
        showAlert(message: "Hallo, hier ist eine Fehlermeldung!")
    }
}

12voto

AstroCB Punkte 12119

Wenn Sie iOS 7 und 8 anvisieren, benötigen Sie etwas wie dies, um sicherzustellen, dass Sie die richtige Methode für jede Version verwenden, denn UIAlertView ist in iOS 8 veraltet, aber UIAlertController ist in iOS 7 nicht verfügbar:

func alert(title: String, message: String) {
    if let getModernAlert: AnyClass = NSClassFromString("UIAlertController") { // iOS 8
        let myAlert: UIAlertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
        myAlert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
        self.presentViewController(myAlert, animated: true, completion: nil)
    } else { // iOS 7
        let alert: UIAlertView = UIAlertView()
        alert.delegate = self

        alert.title = title
        alert.message = message
        alert.addButtonWithTitle("OK")

        alert.show()
    }
}

11voto

Anit Kumar Punkte 7709

Zeigen Sie UIAlertView in der Swift-Sprache an :-

Protokoll UIAlertViewDelegate

let alert = UIAlertView(title: "alertView", message: "Dies ist alertView", delegate:self, cancelButtonTitle: "Abbrechen", otherButtonTitles: "Erledigt", "Löschen")
alert.show()

Zeigen Sie UIAlertViewController in der Swift-Sprache an :-

let alert = UIAlertController(title: "Fehler", message: "Geben Sie Daten in Textfelder ein", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)

11voto

Peymankh Punkte 1894

Einfach keine otherButtonTitles im Konstruktor bereitstellen.

let alertView = UIAlertView(title: "Oops!", message: "Etwas ist passiert...", delegate: nil, cancelButtonTitle: "OK")

alertView.show()

Aber ich stimme Oscar zu, diese Klasse ist in iOS 8 veraltet, daher wird UIAlertView nicht mehr verwendet, wenn Sie nur eine iOS 8-App erstellen. Andernfalls funktioniert der obige Code.

11voto

Nitin Punkte 497

AlertView Swift 5 und höher:-

let alert = UIAlertController(title: LocalizedStringConstant.alert, message: message, preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "Retry", style: .cancel, handler: { (_) in
     }))
self.present(alert, animated: true, completion: nil)

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