弹出到根导航控制器 - Swift 3

时间:2017-01-13 13:21:31

标签: ios swift uinavigationcontroller

我有多个导航控制器。它们被放置在这种层次结构中:

(A)SWRevealViewController
       (B)Navigation Controller(sw_front) 
            (C)HomeViewController (root view controller)
                  (D)TabBarController -->
                            (E)Navigation Controller 1--> 
                                 (F)TableController 1 -->
                                 (F)TableController 2.
                            (E)Navigation Controller 2--> 
                                 (F)TableController 1 -->
                                 (F)TableController 2.

我想弹出到主导航控制器的根视图控制器,即我想从F转到C或B.我已经提到了this的答案,并且还将它转换为swift,如下所示:

let appdel: AppDelegate = UIApplication.shared.delegate as! AppDelegate
    let mainwindow : UIWindow = appdel.window!
    let vcObj : HomeViewController = HomeViewController()
    let navObj : UINavigationController = UINavigationController(rootViewController: vcObj)
    mainwindow.rootViewController = navObj

但它只显示一个空白的黑屏。请任何人都可以帮忙。

我正在使用Xcode 8和Swift 3。

3 个答案:

答案 0 :(得分:4)

而不是使用tabBarVC使用sw.pushFrontViewController(VC, animated: true)尝试使用navigationController的推送方式推送self.navigationController?.pushViewController(tabBarVC!, animated: true)

HomeViewController

然后从TableController调用以下转到func goToHomeNavVC(){ //parent is TabBar Controller self.parent?.navigationController?.popToRootViewController(animated: true) }

Int32.MinValue

这是Demo

答案 1 :(得分:0)

您可以通过迭代presentingViewController层次结构,然后在要解除的那个上调用dismissViewController来解雇特定的视图控制器。

示例:

func dismissToHome() {
    var vc = self.presentingViewController

    while (vc != nil) {
        if (vc!.isKind(of: HomeViewController.self)) {
            break
        }

        vc = vc?.presentingViewController
    }

    vc?.dismiss(animated: true, completion: {
        print("Dismissed to: ", vc!)
    })
}

以上内容将在dismissViewController上调用HomeViewController,这将取消它所呈现的视图控制器。由于该控制器被解雇,所有其他儿童控制员都被其父母解雇。

答案 2 :(得分:-2)

我用过

let modal: UIViewController = self.storyboard?.instantiateViewController(withIdentifier: StoryBoardID) as UIViewController!
self.present(modal, animated: true, completion: nil)

做这样的事情。 StoryBoradID是您为ViewController提供的标识符。也许这对你的情况有帮助。