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