簡體   English   中英

如何在UITabBarController中顯示ViewController?

[英]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和兩個視圖控制器:

  • ViewControllerA
  • ViewControllerB

您需要做的是將它們每個都嵌入導航控制器中,這樣您就可以:

  • UINavigationController-> ViewControllerA
  • UINavigationController-> ViewControllerB

為了推送新的控制器,您可以執行以下操作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM