问题
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
回答1:
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!
回答2:
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:
- Select the Tab Bar Controller in the Storyboard Interface
- Show the Identity Inspector in the Utilities panel
- Add a new "User Defined Runtime Attribute"
- Set the Key Path to "selectedIndex"
- Set the Type to "Number"
- Set the Value to the index of the tab you wish to select (a value of 1 would select the second tab for example)
- Save the Storyboard, build and run the application
This should be what it looks like when you've achieved the above steps:
回答3:
Might seem like overkill for some to subclass UITabBarController
, but, I think it provides the cleanest solution.
- Create
BaseTabBarController.swift
Add an
@IBInspectable
and set it inviewDidLoad
: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:
- Go to the Attributes Inspector add set the new property Default Index:
- ta-da! (:
回答4:
- Create a new file subclass of
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.
回答5:
The following code worked for me:
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
tabBarController.selectedIndex = 2;
回答6:
in appdelegate find applicationDidBecomeActive
function and add this lines
let tabBarController = self.window?.rootViewController as! UITabBarController
tabBarController.selectedIndex = 0 // any index you want
回答7:
In the viewDidLoad()
of the TabBarController
, set selectedIndex
to whatever you want. (0
would be the first, 3
would be the fourth, etc.)
回答8:
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:
- Select the bar item instead of the TabBar
- Got to "User Defined Runtime Attribute"
- Add new key
- Name it "selected"
- Set its type to boolean and choose true / or check the checkbox
回答9:
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
回答10:
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]
}
}
}
回答11:
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)
回答12:
In InterfaceBuilder, disconnect all the segues, then reconnect them in the order you want them to appear.
来源:https://stackoverflow.com/questions/13136699/setting-the-default-tab-when-using-storyboards