2016-06-15 8 views
1

Das ist mein Projekt-Konfiguration ist:DismissViewControllerAnimated mehr als 1 Controller entlassen

UINavigationController1 ->UIViewController1 ->UINavigationController2 ->UIViewController2 ->UIViewController3 ->UIViewController4

Im UIViewController4 ich tun: self.presentViewController(newController, animated: true, completion: nil)

Wenn ich meine Arbeit in diesem Controller abgeschlossen habe, mache ich: self.dismissViewControllerAnimated(true, completion: nil)

Diese letzte Aktion schließen nicht nur newController und zeigen Sie mir UIViewController4, aber zeigen Sie mir UIViewController1

deinit{print("test")} von zufälligen anderen Controllern in der UINavigationController1 genannt werden.

Ich möchte nur die newController entlassen und die UIViewController4 zeigen.

Ich kann den Controller nicht drücken/pop, weil dies ein libraryController ist, der Anruf ist.

Wie kann ich tun?

+0

warum Sie UINavigationController2 verwenden, versuchen Sie durch nur mit UINavigationController1, Danke –

+0

Ich benutze eine zweite Navigation nController, weil ich einen Tabar verwende. Wenn ich den NavigationController2 entferne denke ich, dass die Kündigung mich zum ersten App-Controller bringt – Robin

Antwort

0

Benutzer Code unten perticular Ansicht

dispatch_async(dispatch_get_main_queue(), 
          { 
          if let topController = UIApplication.topViewController() 
          { 
           topController.dismissViewControllerAnimated(false, completion: nil) 
          } 
      }) 

Für die Prüfung Super View-Controller-Anwendung unter Code deismiss

if let topController = UIApplication.topViewController() { 
         print("From Super View \(topController)") 
        } 

und erstellen eine Verlängerung

extension UIApplication { 

    class func topViewController(viewController: UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController) -> UIViewController? { 
     if let nav = viewController as? UINavigationController { 
      return topViewController(nav.visibleViewController) 
     } 
     if let tab = viewController as? UITabBarController { 
      if let selected = tab.selectedViewController { 
       return topViewController(selected) 
      } 
     } 
     if let presented = viewController?.presentedViewController { 
      return topViewController(presented) 
     } 

     if let slide = viewController as? SlideMenuController { 
      return topViewController(slide.currentViewController) 
     } 
     return viewController 
    } 
} 
Verwandte Themen