Программное переключение между вкладками в Swift
Мне нужно написать код для переключения вида на другую вкладку при запуске приложения iOS (так, например, вторая вкладка отображается по умолчанию, а не первая).
Я новичок в Swift и разработал следующее:
-
Код должен, вероятно, перейти в функцию override func viewDidLoad() в ViewController первой вкладки.
-
Следующий код показывает второй ViewController, но не с панелью вкладок внизу (vcOptions - это второй элемент вкладки ViewController:
let vc : AnyObject! = self.storyboard.instantiateViewControllerWithIdentifier("vcOptions")
self.showViewController(vc as UIViewController, sender: vc)
Я думаю, что ответ может заключаться в использовании UITabbarController.selectedIndex = 1, но не совсем уверен, как это реализовать.
Ответы
Ответ 1
Если ваш window
rootViewController
- UITabbarController
(что в большинстве случаев), то вы можете получить доступ к tabbar
в didFinishLaunchingWithOptions
в файле AppDelegate
.
func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
// Override point for customization after application launch.
if let tabBarController = self.window!.rootViewController as? UITabBarController {
tabBarController.selectedIndex = 1
}
return true
}
Откроется вкладка с index
, заданным (1) в selectedIndex
.
Если вы делаете это в viewDidLoad
вашего firstViewController
, вам нужно управлять с помощью флага или другим способом, чтобы отслеживать выбранную вкладку. Лучшее место для этого - в didFinishLaunchingWithOptions
вашего файла AppDelegate
или в rootViewController
пользовательском классе viewDidLoad
.
Ответ 2
1. Создайте новый класс, который заменяет UITabBarController.
Например:
class xxx: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
}
2. Добавьте следующий код в функцию viewDidLoad():
self.selectedIndex = 1; //set the tab index you want to show here, start from 0
3. Перейдите в раскадровку и установите для этого класса новый пользовательский класс вашего контроллера панели вкладок.
(MyVotes1 в качестве примера на рис.)
![enter image description here]()
Ответ 3
Swift 3
Этот код можно добавить к контроллеру представления по умолчанию (index 0
) в вашем tabBarController:
override func viewWillAppear(_ animated: Bool) {
_ = self.tabBarController?.selectedIndex = 1
}
При загрузке это автоматически переместит вкладку ко второму элементу в списке, но также позволит пользователю вручную вернуться к этому представлению в любое время.
Ответ 4
Чтобы расширить ответ на @codester, вам не нужно проверять, а затем назначать, вы можете сделать это за один шаг:
func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
// Override point for customization after application launch.
if let tabBarController = self.window!.rootViewController as? UITabBarController {
tabBarController.selectedIndex = 1
}
return true
}
Ответ 5
ViewController должен быть дочерним по отношению к UITabBarControllerDelegate. Так что вам просто нужно добавить следующий код на SWIFT 3
self.tabBarController?.selectedIndex = 1
Ответ 6
В типичном приложении есть UITabBarController, и он встраивает 3 или более UIViewController в качестве вкладок. В таком случае, если вы подклассифицировали UITabBarController как YourTabBarController, тогда вы можете установить выбранный индекс просто:
selectedIndex = 1 // Displays 2nd tab. The index starts from 0.
Если вы переходите к YourTabBarController из любого другого представления, то в этом представлении контроллер подготовит (для segue :) метод, который вы можете сделать:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
if segue.identifier == "SegueToYourTabBarController" {
if let destVC = segue.destination as? YourTabBarController {
destVC.selectedIndex = 0
}
}
Я использую этот способ настройки вкладки с Xcode 10 и Swift 4.2.