Can anyone please tell me how to set the default tab when using storyboards in iOS. I can't seem to figure out how to accomplish this.
Thank you
Can anyone please tell me how to set the default tab when using storyboards in iOS. I can't seem to figure out how to accomplish this.
Thank you
Whilst you can set the initial selected tab programmatically like the other answers, to achieve the same in your storyboard without touching code you would perform the following:
This should be what it looks like when you've achieved the above steps:
Might seem like overkill for some to subclass UITabBarController
, but, I think it provides the cleanest solution.
BaseTabBarController.swift
Add an @IBInspectable
and set it in viewDidLoad
:
class BaseTabBarController: UITabBarController {
@IBInspectable var defaultIndex: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
selectedIndex = defaultIndex
}
}
In the storyboard, set you UITabBarController
to be your new subclass:
UITabBarController
;Add this at the end of viewDidLoad
:
self.selectedIndex = 1;
Set this new file as the Custom Class in the UITabBarController
of your Storyboard.
You're done.
The following code worked for me:
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
tabBarController.selectedIndex = 2;
You can use one of these two methods:
tabBar.items = tabBarItems;
tabBar.selectedItem = [tabBarItems objectAtIndex:0];
or a direct method from the object
[tabBar setSelectedItem:myUITabBarItem];
or you can combine them to do this:
tabBar.items = tabBarItems;
[tabBar setSelectedItem:[tabBarItems objectAtIndex:0]];
but i havent tested that method yet, hope this helps!
in appdelegate find applicationDidBecomeActive
function and add this lines
let tabBarController = self.window?.rootViewController as! UITabBarController
tabBarController.selectedIndex = 0 // any index you want
My variant is suitable when you want just change the default selected controller, no more customizing. Just add the follow category:
// UITabBarController+DefaultPage.h
#import <UIKit/UIKit.h>
@interface UITabBarController(DefaultPage)
@end
// UITabBarController+DefaultPage.m
#import "UITabBarController+DefaultPage.h"
@implementation UITabBarController(DefaultPage)
- (void)viewDidLoad {
[super viewDidLoad];
self.selectedIndex = 1;
}
@end
p.s: I prefer @joshua-finch answer
In the viewDidLoad()
of the TabBarController
, set selectedIndex
to whatever you want. (0
would be the first, 3
would be the fourth, etc.)
You can achieve this through Xcode 8 or later (just tested it and don't know if it's available before this version)
Do the steps as @Joshua Finch said but:
Building upon Aviel Gross' answer, I just wanted to implement this for a UITabBar, as opposed to a UITabBarController. This can be done as follows:
class BaseTabBar: UITabBar {
@IBInspectable var defaultIndex: Int = 0 {
didSet {
self.selectedItem = self.items?[defaultIndex]
}
}
}
Provided you're navigating to your UITabBarController from e.g. a login screen it might be least pain to set the selection there:
let tabs = self.storyboard?.instantiateViewController(withIdentifier: "tabs") as! UITabBarController
tabs.selectedIndex = 1
self.present(tabs, animated:false)
In InterfaceBuilder, disconnect all the segues, then reconnect them in the order you want them to appear.