2017-02-18 6 views
2

Ich habe einen sekundären Viewcontroller, die programmgesteuert über ein Storyboard segue erscheint:Swift dismissViewController von Segue - macOS

func actioncall() 
{ 
    performSegue(withIdentifier: "showIgnoreVC", sender: self) 

} 

)

Diese Funktion ist Teil des Hauptviewcontroller ist, und über einen NSNotification genannt aus das AppDelegate, das wiederum durch einen Menüpunkt Klick ausgelöst wird.

Doch obwohl der Übergang zum Hauptviewcontroller verbunden ist, wird der folgende Code nicht die sekundäre Ansicht entlassen:

@IBAction func dismiss(_ sender: Any) 
{ 
    print("Hello? Gonna close?") 

    self.presenting?.dismissViewController(self) 
} 

Es gibt keine Fehler, wird die Funktion auf der richtigen genannt Taste Entlassen Klicken Sie auf, aber die sekundäre Ansicht wird nicht geschlossen. Ich habe jede Variante von disneyViewController vergeblich versucht.

Wenn ich eine Schaltfläche in der Hauptansicht verwende, um den gleichen Übergang zu aktivieren, funktioniert alles wie es soll. Ich möchte einfach nicht die Hauptansicht mit einer Reihe von Knöpfen überladen.

Irgendwelche Ideen werden geschätzt, vielen Dank.

+0

Wenn diese Zeile 'self.presentting? .dismissViewController (self)' führt aus, was ist der Wert von 'self.presenting'? –

+0

@DaveWeston, gute Frage. Mit 'let x = self.presenting! als NSViewController "stürzt die App mit ** fatal error ab: Unerwartetes gefunden nil beim Entpacken eines optionalen Wertes **. Anscheinend gibt es keinen viewController, der präsentiert. –

Antwort

1

dismissViewController nur für View-Controller arbeitet, die modal vorgestellt wurden (unter Verwendung von Present Modally Segue) Wie gesagt in der Antwort auf this SO question, sollten Sie View-Controller entlassen, von Show Segue präsentiert, wie folgt aus:

navigationController?.popViewController(animated: true) 
dismiss(animated: true, completion: nil) 
+0

disneyViewController funktioniert für View-Controller, die als Arbeitsblatt dargestellt werden und ebenfalls angezeigt werden. In diesem Projekt gibt es keinen navigationController. Vielen Dank für Ihre Eingabe. –