miki
miki

Reputation: 73

Navigation disappeared after adding tabBarController, iOS, Swift

I am trying to implement tabBarController and I managed to do it, but now my navigation from screens that are inside tabBar disappeared. I tried inside every viewController in viewDidLoad setting isHidden to false, but didn't help. Code below is from my tabBarController.

class BottomTabBarViewController: UITabBarController, UINavigationControllerDelegate {
    
override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.isNavigationBarHidden = false
    self.viewControllers = [bookedTrips, bookedTripsDetails, needHelp]
    customizeTabBar()
}

func customizeTabBar() {
    tabBar.backgroundColor = .init(red: 0.949, green: 0.949, blue: 0.949, alpha: 1)
    tabBar.shadowImage = UIImage()
    tabBar.backgroundImage = UIImage()
    tabBar.tintColor = .init(red: 0.949, green: 0.392, blue: 0.153, alpha: 1)
    tabBar.unselectedItemTintColor = .init(red: 0.753, green: 0.753, blue: 0.753, alpha: 1)
}

lazy public var bookedTrips: BookedTripsListViewController = {
    let initialTabBar = BookedTripsListViewController(networkManager: NetworkManager())
    let tabBarItems = UITabBarItem(title: "First", image: UIImage(named: "bag.png"), selectedImage: UIImage(named: "bag.png"))
    let tabBarItem = UITabBarItem(title: tabBarItems.title, image: tabBarItems.image, selectedImage: tabBarItems.selectedImage)
    initialTabBar.tabBarItem = tabBarItem
    return initialTabBar
}()

lazy public var bookedTripsDetails: TripDetailsViewController = {
    let initialTabBar = TripDetailsViewController()
    let tabBarItems = UITabBarItem(title: "Second", image: UIImage(named: "bag.png"), selectedImage: UIImage(named: "bag.png"))
    let tabBarItem = UITabBarItem(title: tabBarItems.title, image: tabBarItems.image, selectedImage: tabBarItems.selectedImage)
    initialTabBar.tabBarItem = tabBarItem
    return initialTabBar
}()

lazy public var needHelp: NeedHelpViewController = {
    let initialTabBar = NeedHelpViewController()
    let tabBarItems = UITabBarItem(title: "Third", image: UIImage(named: "bag.png"), selectedImage: UIImage(named: "bag.png"))
    let tabBarItem = UITabBarItem(title: tabBarItems.title, image: tabBarItems.image, selectedImage: tabBarItems.selectedImage)
    initialTabBar.tabBarItem = tabBarItem
    return initialTabBar
}()
}

Not sure is it relevant, but I set tabBar to be visible after login, so if login data is correct, show tabBar.

Upvotes: 0

Views: 86

Answers (1)

miki
miki

Reputation: 73

Managed to solve this, if anyone need help similar to this, solution is to set return type UINaviagtionController and set instance of viewController as rootController, example below.

   lazy public var bookedTrips: UINavigationController = {
    let initialTabBar = UINavigationController(rootViewController: BookedTripsListViewController(networkManager: NetworkManager()))
    let tabBarItems = UITabBarItem(title: "First", image: UIImage(named: "bag.png"), selectedImage: UIImage(named: "bag.png"))
    let tabBarItem = UITabBarItem(title: tabBarItems.title, image: tabBarItems.image, selectedImage: tabBarItems.selectedImage)
    initialTabBar.tabBarItem = tabBarItem
    return initialTabBar
}()

Upvotes: 1

Related Questions