Como a solução de Stuart Clark, mas para Swift 3 e usando o identificador de restauração para encontrar a guia correta:
private func setTabById(id: String) {
var i: Int = 0
if let controllers = self.tabBarController?.viewControllers {
for controller in controllers {
if let nav = controller as? UINavigationController, nav.topViewController?.restorationIdentifier == id {
break
}
i = i+1
}
}
self.tabBarController?.selectedIndex = i
}
Use-o assim ("Humanos" e "Robôs" também devem ser definidos no storyboard para um viewController específico e seu ID de restauração, ou use o Storyboard ID e marque "use storyboard ID" como ID de restauração):
struct Tabs {
static let Humans = "Humans"
static let Robots = "Robots"
}
setTabById(id: Tabs.Robots)
Observe que meu tabController está vinculado a viewControllers atrás de navigationControllers. Sem navigationControllers, ficaria assim:
if controller.restorationIdentifier == id {