我有多个导航控制器。它们被放置在这种层次结构中:
(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。
答案 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提供的标识符。也许这对你的情况有帮助。