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

Ios 弹出到根导航控制器-Swift 3,ios,swift,uinavigationcontroller,Ios,Swift,Uinavigationcontroller,我有多个导航控制器。它们的放置方式如下所示: (A)SWRevealViewController (B)Navigation Controller(sw_front) (C)HomeViewController (root view controller) (D)TabBarController --> (E)Navigation Controller 1--

我有多个导航控制器。它们的放置方式如下所示:

(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。我提到了答案,并将其转换为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。

我使用的是

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

做这样的事。StoryBoradID是您给ViewController的标识符。这可能对您的情况有所帮助。

您可以通过迭代
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!)
    })
}

上述操作将在
HomeViewController
上调用
dismissViewController
,这将关闭它显示的视图控制器。由于该控制器被解除,所有其他子控制器将被其父控制器解除。

而不是使用
sw推送您的
tabBarVC
。pushFrontViewController(VC,动画:true)
尝试使用
navigationController
的推送方法

self.navigationController?.pushViewController(tabBarVC!, animated: true)
然后从TableController调用以下命令,转到
HomeViewController

func goToHomeNavVC(){
        //parent is TabBar Controller
        self.parent?.navigationController?.popToRootViewController(animated: true)
    }

下面是一个

让抽屉视图控制器=viewControllerFrom(“Main”,vcid:“SliderMinuViewController”)让仪表板VC=viewControllerFrom(“Main”,vcid:“UserDashboardViewController”)为!UserDashboardViewController让navigationControl=UINavigationController(rootViewController:dashboardVC)窗口?.rootViewController=navigationControl您如何将TabBarController添加到HomeViewController?@Himanshuradiaya这不起作用。没有类似viewControllerFrom()@ZaidPathan的内容。我在情节提要上添加了它,但通过中的情节提要ID访问了它code@user7205816但是你是怎么加上去的?我是说present/push/addChild视图?@user7205816;我在和你相同的层次结构上测试了这个。我通过CocoaPods安装了
SWRevealViewController
。它在XCode 8.2.1 iOS 8、9、10模拟器上运行良好。我使用了从C到D的SWRevealPushSegue,可能这就是它不工作的原因。如果我这样做,pushViewController则在实际导航栏下方有一个导航栏的空间。如果可能的话,发送您的演示项目这是不可能的,因为项目即将完成。。但我需要通过代码来执行SWRevealViewControllerPushSegue,所以我甚至不能使用.pushViewController。如果您需要一对一的帮助,请与我联系。否则我肯定需要一个演示。这样做将使导航控制器中的所有VC都保留在内存中,并允许用户在自己的顶部重新创建它们。坏习惯。