2016-06-15 88 views
1

這是我的項目配置:DismissViewControllerAnimated解僱超過1個控制器

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

UIViewController4我做的: self.presentViewController(newController, animated: true, completion: nil)

當我在這個控制器完成我的工作時,我這樣做: self.dismissViewControllerAnimated(true, completion: nil)

這最後一個動作不關閉只是newController並告訴我UIViewController4,但告訴我UIViewController1

隨機別人的deinit{print("test")}UINavigationController1控制器被調用。

我只想關閉newController並顯示UIViewController4

我不能推/控制器,因爲這是一個庫控制器,這是調用。

我該怎麼辦?下面的代碼

+0

爲什麼你使用UINavigationController2,通過嘗試只使用UINavigationController1,謝謝 –

+0

我使用第二個Navigatio nController,因爲我使用了tabar。如果我刪除了NavigationController2,我認爲解僱會將我帶到第一個應用程序控制器 – Robin

回答

0

用戶到deismiss perticular視圖

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

對於下面的代碼

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

檢查超級視圖控制器使用,並創建一個擴展

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 
    } 
} 
相關問題