Как и решение Стюарта Кларка, но для Swift 3 и использования идентификатора восстановления, чтобы найти правильную вкладку:
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
}
Используйте его следующим образом («Люди» и «Роботы» также должны быть установлены в раскадровке для определенного viewController и его идентификатора восстановления, или используйте идентификатор раскадровки и отметьте «использовать идентификатор раскадровки» в качестве идентификатора восстановления):
struct Tabs {
static let Humans = "Humans"
static let Robots = "Robots"
}
setTabById(id: Tabs.Robots)
Обратите внимание, что моя tabController ссылается на viewController за навигационными контроллерами. Без navigationControllers это выглядело бы так:
if controller.restorationIdentifier == id {