Подтвердить что ты не робот

Программное переключение между вкладками в 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, но не совсем уверен, как это реализовать.

4b9b3361

Ответ 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.