Einen Segue (Übergang) stoppen um eine Alert-Box anzuzeigen

Bevor man einem User erlaubt Daten zu ändern bzw. zu speichern, möchte man ihn eventuell noch auf unvollständige Daten aufmerksam machen. Dafür bietet sich die Methode shouldPerformSegueWithIdentifier an. Diese Methode wird aufgerufen, bevor die App von einer View in eine andere View wechselt. Man hat hier als Entwickler die Möglichkeit einzugreifen um z.B. zu prüfen, ob alle User-Daten valide sind.
Möchte man die Logik innerhalb der Methode nur auf bestimmte Segues (=“Übergänge“) anwenden, muss man diesem Segue im Interfacebuilder einen entsprechenden Identifier zuweisen. Auf diesen Identifier kann man dann direkt in der Methode zugreifen.

override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {
  // Check for desired identifier
  if identifier == "myIdentifier" {
    // Stop the segue
    return false
  } else {
    // Continue to next view for every other segue
    return true
  }
}

In diesem Beispiel wird der Übergang zur nächsten View unterbrochen (sprich: Der User verbleibt auf der aktuellen View), wenn der Segue/Übergang mit dem Identifier „myIdentifier“ ausgelöst wurde.

Dieses Prozedere kann man ausnutzen und dem User z.B. eine Alert-Box anzeigen:

override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {
  // Check if name is not empty
  if self.nameTextBox == "" {
    // Show alert
    let alert = UIAlertController(title: "Empty name", message: "Please enter a name", preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
    self.presentViewController(alert, animated: true, completion: nil)

    // Stop the segue
    return false
  } else {

    // Save user data and/or perform other logic
    ...

    // Continue to next view
    return true
  }
}

Wichtig:
Neben shouldPerformSegueWithIdentifier gibt es auch noch die Methode prepareForSegue, die einem ähnlichen Zweck dient. Allerdings kann hier der Übergang nicht abgebrochen werden, wie es bei shouldPerformSegueWithIdentifier der Fall ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert