同时使用导航控制器和标签栏

Posted

技术标签:

【中文标题】同时使用导航控制器和标签栏【英文标题】:Use both navigation controller and tab bar 【发布时间】:2020-10-23 12:52:27 【问题描述】:

我使用导航控制器来推送我的视图。像这样:

func showDetailForCategory(product: Category)

    let storyBoard = UIStoryboard(name: "Main", bundle:nil)
    let categoryViewController =  storyBoard.instantiateViewController(withIdentifier: "categoryDetail") as! CategoryViewController
    
    categoryViewController.categoryId = product.id
    self.navigationController?.pushViewController(categoryViewController, animated:true)
    

它工作得很好。但我也想使用工具栏。我的AppDelegate 如下所示

    let layout = UICollectionViewFlowLayout()
    let featuredAppsController = FeaturedAppsController(collectionViewLayout: layout)
    window?.rootViewController = UINavigationController(rootViewController: featuredAppsController)
    
    let vc1 = featuredAppsController
    vc1.tabBarItem.title = "Orange"
    vc1.tabBarItem.image = UIImage(named: "heart")
    
    // Set up the second View Controller
    let vc2 = UIViewController()
    vc2.view.backgroundColor = UIColor.purple
    vc2.tabBarItem.title = "Purple"
    vc2.tabBarItem.image = UIImage(named: "star")
    
    // Set up the Tab Bar Controller to have two tabs
    let tabBarController = UITabBarController()
    tabBarController.viewControllers = [vc1, vc2]
    
    // Make the Tab Bar Controller the root view controller
    window?.rootViewController = tabBarController
    window?.makeKeyAndVisible()

我添加了TabBarController。它工作正常。但是我的NavigationController 不起作用。我认为这是因为我为其中两个设置了rootViewController。我应该如何解决这个问题?感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

你需要这样的东西

let firstVc = UIViewController()
let secondVc = UIViewController()

let firstNav = UINavigationController(rootViewController: firstVc)
let secondNav = UINavigationController(rootViewController: secondVc)

let tabBarController = UITabBarController()
tabBarController.viewControllers = [firstNav, secondNav]

window?.rootViewController = tabBarController
window?.makeKeyAndVisible()

当然,填写你的课程等等,但基本的想法是这样的

【讨论】:

我的导航栏仍然不起作用。当我按下按钮或其他东西时,我使用导航栏控制器推送视图。现在,只有工具栏控制器有效。 您应该在底部看到两个标签,每个标签都有一个视图。检查您是否以编程方式隐藏导航栏,如果没有,请检查您是否在其中一个导航栏上推送新控制器,会发生什么。如果什么都没有,那么就会发生一些大事,因为它应该非常简单并且开箱即用。

以上是关于同时使用导航控制器和标签栏的主要内容,如果未能解决你的问题,请参考以下文章

用动画隐藏导航控制器和标签栏控制器

组合标签栏和导航栏控制器出现问题

导航和标签栏控制器未显示

使用标签栏和导航实例化深度视图控制器

创建标签栏控制器和导航控制器

使用标签栏控制器实现导航栏项目的更简单方法?