Dennis van Mazijk Dennis van Mazijk - 3 months ago 22
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.

AppDelegate.swift

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


CustomTabBarController.swift

class CustomTabBarController: UITabBarController, UITabBarControllerDelegate {

override func viewDidLoad() {

super.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

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