Switch tab bar programmatically in Swift
XcodeSwiftUitabbarcontrollerXcode Problem Overview
I have a tab bar application and i have a button on my first view which i want to when pressed switch to my second tab programmatically in the tab bar.
I can't quite seem to figure it out how to get the index etc to switch to it i've tried stuff like this.
tababarController.selectedIndex = 1
With no success.
Xcode Solutions
Solution 1 - Xcode
Thats pretty simple tabBarController is declared as an optional type
var tabBarController: UITabBarController? { get }
> The nearest ancestor in the view controller hierarchy that is a tab bar > controller. If the view controller or one of its ancestors is a child > of a tab bar controller, this property contains the owning tab bar > controller. This property is nil if the view controller is not > embedded inside a tab bar controller.
So you just need to add "?" at the end of it:
@IBAction func goToSecond(_ sender: Any) {
tabBarController?.selectedIndex = 1
}
Solution 2 - Xcode
Swift 3:
func switchToDataTab() {
Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil, repeats: false)
}
func switchToDataTabCont(){
tabBarController!.selectedIndex = 0
}
Swift 4+:
func switchToDataTab() {
Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil, repeats: false)
}
@objc func switchToDataTabCont(){
tabBarController!.selectedIndex = 0
}
Solution 3 - Xcode
The solution provided by Leo Dabus (see above) works fine for me. However - some controls have bad states. Can't fix that, but this little workaround will do you all good:
func switchToDataTab(){
NSTimer.scheduledTimerWithTimeInterval(0.2,
target: self,
selector: "switchToDataTabCont",
userInfo: nil,
repeats: false)
}
func switchToDataTabCont(){
tabBarController!.selectedIndex = 0
}
Solution 4 - Xcode
Add to Anthony's code:
func switchToDataTab(){
NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil,repeats: false)
}
func switchToDataTabCont(){
tabBarController!.selectedIndex = 0
}
Where the selector class has been changed to
#selector(switchToDataTabCont)