Alerts in iOS

Nutzerinteraktion findet unter iOS häufig mit sogenannten Alerts statt. Mit iOS 8 gab es einige Neuerungen, die Entwicklern den Umgang damit erleichtern.

Architektur/Methoden  –  1 Kommentare
Alerts in iOS

Alerts sind in der iOS-Entwicklung ein beliebtes Mittel, um Nutzer auf eine bevorstehende Aktion hinzuweisen oder sie zwischen mehreren Optionen wählen zu lassen. Sie setzen sich aus einem Titel und einer Nachricht zusammen und verfügen über mehrere Schaltflächen, über die die mit der Auswahl verbundenen Aktion ausgeführt wird.

Bis iOS 8 kamen für die Zwecke zwei UIView-Subklassen zum Einsatz: UIAlertView und UIActionSheet. Beide erlaubten es, einen Alert einzublenden und die vom Nutzer getätigte Auswahl zu verarbeiten. Allerdings war der Ansatz relativ aufwendig und komplex in der Implementierung. Instanzen dieser Klassen gaben ihre Ergebnisse per Delegation an eine entsprechend zugewiesene Instanz weiter, die dann für die Auswertung der Nutzerauswahl verantwortlich war. Zudem sorgte das Einordnen von Alerts in zwei Klassen dafür, dass man sich im Vorfeld genau überlegen musste, welche Art Alert man verwenden wollte; eine nachträgliche Änderung war mit entsprechend viel Aufwand und dem Umstellen auf eine andere Klasse verbunden.

Mit der Einführung von iOS 8 hat Apple den Vorgang für Entwickler durch das Ergänzen einer neuen UIViewController-Subklasse deutlich vereinfacht. Mithilfe von UIAlertController lassen sich nun in iOS-Apps Alerts aller Art umsetzen, die zudem über ein einheitliches Interface verfügen. Es ermöglicht zudem ein flexibles und dynamisches Verändern von Alerts, ohne einen Großteil des Codes neu schreiben zu müssen.

Um einen Alert mit der Klasse UIAlertController zu erstellen, kommt ein passender Initializer zum Einsatz. Die entsprechende Deklaration sieht wie folgt aus (ein Beispielprojekt des Autors ist auch auf GitHub zu finden; Pfeile in den folgenden Codeauszügen signalisieren lediglich Layout-bedingte Zeilenumbrüche):

convenience init(title: String?, message: String?, ↲
preferredStyle: UIAlertControllerStyle)

Bei den ersten beiden Parametern, title und message, handelt es sich um Informationen für den Nutzer, die dem Titel und der Nachricht des anzuzeigenden Alert entsprechen. Das System positioniert und formatiert sie automatisch. In modernen iOS-Apps werden die Strings für beide Parameter idealerweise mit NSLocalizedString übersetzt, um von Beginn an mehrsprachige Apps zu unterstützen.

Spannend wird es beim letzten Parameter preferredStyle. Mit ihm definieren Entwickler, wie der anzuzeigende Alert aussieht und wie er innerhalb der App eingeblendet wird. Dafür stehen mit alert und actionSheet zwei Optionen zur Wahl.

Der Style alert blendet eine auf dem Bildschirm zentrierte Nachricht ein, während bei actionSheet ein Auswahlformular am unteren Bildschirmrand erscheint (siehe Abbildung). Damit bilden sie das Aussehen der inzwischen veralteten Klassen UIAlertView und UIActionSheet ab.

Alert (links) und Action Sheet (rechts) eignen sich für unterschiedliche Aufgaben (Abb. 1).


Ein einfacher Alert lässt sich somit wie im folgenden Codeauszug erstellen:

let alertController = UIAlertController(title: "Alert", ↲
message: "This is an alert.", preferredStyle: .alert)

Neben Titel und anzuzeigender Nachricht braucht es nur den gewünschten Style, um einen einfachen Alert zu generieren.

Um ihn noch innerhalb einer iOS-App anzuzeigen, ist er mit present(_:animated:completion:) aufzurufen, also der Methode, mit der man auch jeden anderen View Controller in der iOS-Entwicklung einblendet:

present(alertController, animated: true, completion: nil)