2016-05-15 7 views
0

Ich habe einen ViewController, der sowohl im Tab-Bar-Controller als auch im Navigations-Controller eingebettet ist. Es hat eine Rolle eines Spiels/Quiz:Swift - Bestätigung beim Wechseln der Ansicht

enter image description here

Ich möchte ein Benutzer jedes Mal bestätigen, wenn er das Spiel im Gange beenden will, wenn er versucht Ansicht (ändern Registerkarte zu ändern, klicken Sie auf „Zurück“ oder einfach die App verlassen).

Also ich denke, meine Frage ist: Wo sollte ich meine UIAlertController platzieren, um es funktioniert die beschriebene Weise?

+0

so 'addTarget' Aktion zu dieser Schaltfläche dann setzen Sie Ihren UIAlertController – Lamar

Antwort

1

Sie können die Delegierten für beide jeweils die UITabBarController und der UINavigationBar, UITabBarControllerDelegate und UINavigationBarDelegate implementieren.

Für die UITabBarControllerDelegate implementieren:

func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool { 
    // alert here, don't go back unless user confirms 
} 

Für die UINavigationBarDelegate implementieren:

func navigationBar(navigationBar: UINavigationBar, shouldPopItem item: UINavigationItem) -> Bool { 
    // alert here, don't go back unless user confirms 
} 

Hinweis: Die UINavigationBar ist eine Eigenschaft Ihrer UINavigationController - Sie können die Delegierten werden durch navigationController.navigationBar.delegate = self;

+0

Hallo, danke, das war eigentlich ziemlich nützlich. Ich kann das nicht funktionieren. 'shouldPopItem' kehrt sofort zurück und wartet nicht einmal auf die' UIAlertController' Antwort. So kann ich den Controller nach der Benutzerbestätigung ansehen, aber das Element der Navigationsleiste wird nicht angezeigt. Weißt du vielleicht, wie man das löst, @Carter? – jwitos

+0

Ich bin mir nicht sicher, was du mit der Navigationsleiste meinst. Nachdem der Benutzer bestätigt hat, können Sie Ihrem UINavigationController mitteilen, dass der Popup-Code ebenfalls aktualisiert werden soll. – Carter

+0

Es aktualisiert die Leiste korrekt, aber der View-Controller (unterhalb der Navigationsleiste) springt nicht zur vorherigen Ansicht auf dem Navigations-Stack, selbst wenn ich versuche, die Methode "self.popViewControllerAnimated" auszuführen. – jwitos

Verwandte Themen