[英]How can I show ViewController in UITabBarController?
我有一個UITabBarController,所有其他視圖控制器都已連接到它。 現在,我想顯示一個控制器:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc: ViewController = storyboard.instantiateViewControllerWithIdentifier("ViewController") as! ViewController
但是當我嘗試:
let rootViewController = self.window?.rootViewController as! UINavigationController
rootViewController.pushViewController(vc, animated: true)
它給了我下一個錯誤:
Could not cast value of type 'UITabBarController' (0x1a899b818) to 'UINavigationController'
后來我嘗試去做:
let rootViewController = self.window?.rootViewController as! UITabBarController
但是在這種情況下
UITabBar has no member pushViewController
如何顯示/推送ViewController,使其隨UINavigationBar和UITabBar一起出現?
您需要將每個視圖控制器放置在導航控制器中。
例如,當前您有一個TabBarViewController和兩個視圖控制器:
您需要做的是將它們每個都嵌入導航控制器中,這樣您就可以:
為了推送新的控制器,您可以執行以下操作:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc: ViewController = storyboard.instantiateViewControllerWithIdentifier("ViewController") as! ViewController
let navViewController = myTabBar.selectedViewController as? UINavigationController
navViewController?.pushViewController(vc, animated: true)
Could not cast value of type 'UITabBarController' (0x1a899b818) to 'UINavigationController'
您的根視圖控制器的類型為UITabBarController 。 因此,您必須使用此類的適當方法,而不是UINavigationController。 要設置視圖控制器,請使用
var viewControllers: [UIViewController]?
要么
func setViewControllers([UIViewController]?, animated: Bool)
。
要擁有導航欄,您必須實例化UINavigationController並將視圖控制器添加到此導航控制器。 然后通過上述選項之一將導航控制器添加到UITabBarController。
如果您的類是UITabBarController,則可以添加以下內容:
private func showViewController() {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
guard let vc = storyboard.instantiateViewController(withIdentifier: "queueTableViewController") as? QueueTableViewController else { return }
let navVC = self.selectedViewController as? UINavigationController
navVC?.pushViewController(vc, animated: true)
}
這將允許您轉到任何VC
第二種解決方案是這樣的。 在這里,您將顯示最后一個VC,然后從那里推送一些VC。
guard let tabCount = viewControllers?.count, tabCount > 1 else { return }
selectedIndex = tabCount - 1
if let navigationController = viewControllers?[selectedIndex] as? UINavigationController {
if let accountVC = navigationController.visibleViewController as? FirstViewController {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
guard let vc = storyboard.instantiateViewController(withIdentifier: "someViewController") as? SomeViewController else { return }
accountVC.navigationController?.pushViewController(vc, animated: true)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.