Dennis van Mazijk Dennis van Mazijk - 1 year ago 85
Swift Question

Swift: How to access a tab bar item by pressing a nav bar button

I currently have a CustomTabBarController class and a CustomNavBarController class.

The tab bar has five tabs and works fine. The nav bar class adds three buttons (home/messages/profile) to the right side of my navigation bar. When I click the home button, the function below will be triggered.

CustomNavBarController.swift (only the tappedHome function)

func tappedHome(sender: UIButton) {
// Go to home page (tab bar index 0)

This is my AppDelegate and CustomTabBar file.


window?.rootViewController = CustomTabBarController()
let tabBar: UITabBarController = self.window?.rootViewController as! UITabBarController
tabBar.selectedIndex = 0


class CustomTabBarController: UITabBarController, UITabBarControllerDelegate {

override func viewDidLoad() {


self.delegate = self

self.viewControllers = [createDummyNavControllerWithTitle("News", imageName: "icon_news", viewController: MainController()),
createDummyNavControllerWithTitle("Games", imageName: "icon_games", viewController: GamesController()),
createDummyNavControllerWithTitle("Students", imageName: "icon_students", viewController: StudentsController()),
createDummyNavControllerWithTitle("Ranking", imageName: "icon_rank", viewController: StatsController()),
createDummyNavControllerWithTitle("Info", imageName: "icon_info", viewController: InfoController())]

func tabBarController(tabbarController: UITabBarController, didSelectViewController viewController: UIViewController) {

self.title = viewController.title

// Shortcut function for the tab bar items
private func createDummyNavControllerWithTitle(title: String, imageName: String, viewController: UIViewController) -> UINavigationController {

viewController.title = title

let navController = UINavigationController(rootViewController: viewController)
navController.tabBarItem.title = title
navController.tabBarItem.image = UIImage(named: imageName)?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)

return navController

How do I tell my function in CustomNavBarController.swift to load the first index of my tab bar when I click the home button?

PS: The reason why I want two ways to actually go back to the home page is because the tab bar won't be visible in every situation.

Answer Source

Executing the following code in your tappedHome(_:) method should do the trick:

let appDelegate  = UIApplication.sharedApplication().delegate as! AppDelegate
let tabBarController = appDelegate.window!.rootViewController as! UITabBarController
tabBarController.selectedIndex = 0