2017-08-21 47 views
0

這是彈出用戶返回到根在一個UINavigationController功能:如何從單獨的視圖控制器調用popToRootViewController()函數?

func popToRoot() { 
    navigationController?.popToRootViewController(animated: true) 
} 

不過,我需要從標籤欄,這顯然是一個完全不同的類文件,並調用這個函數甚至不在導航堆棧中。

func moveToTab3(sender: UIButton!) { 
    if CurrentContentController != containerStack[3] { 
     moveToTab(3, animated: false) 
    } else { 
     // since you are already in this tab, popToRoot function goes here, but how? 
    } 
} 

問題是.navigationController?是非常特殊的,它似乎必須從它駐留的對象內調用。這是如何完成的?

+0

可以委託回標籤欄控制器,並調用特定的導航控制器做竅門?或者只需發送一個通知來處理它。 – Turtleeeeee

回答

0

我不知道,我得到了你的權利,但要能夠導航到電流控制器的根,你可以使用這個檢測你的應用程序的最頂端控制器:

extension UIApplication { 
    class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? { 
     if let navigationController = controller as? UINavigationController { 
      return topViewController(controller: navigationController.visibleViewController) 
     } 
     if let tabController = controller as? UITabBarController { 
      if let selected = tabController.selectedViewController { 
       return topViewController(controller: selected) 
      } 
     } 
     if let presented = controller?.presentedViewController { 
      return topViewController(controller: presented) 
     } 
     return controller 
    } 
} 

然後你可以訪問該頂級控制器並呼叫popToRoot:

if let topController = UIApplication.topViewController() { 
     // navigate to the root 
       topController.navigationController?.popToRootViewController(animated: true) 
} 

它應該工作。讓我知道如果你需要更多的信息

相關問題