web-dev-qa-db-fra.com

Basculement programmé entre les onglets de Swift

J'ai besoin d'écrire du code pour passer de la vue à un autre onglet lorsque l'application iOS démarre (ainsi, par exemple, le deuxième onglet est affiché par défaut plutôt que le premier).

Je suis nouveau chez Swift et j'ai travaillé sur les points suivants:

  • Le code devrait probablement aller dans la fonction func viewDidLoad () du ViewController du premier onglet.

  • Le code suivant montre le deuxième ViewController, mais pas avec la barre d’onglet en bas (vcOptions est le deuxième élément de l’onglet ViewController:

let vc : AnyObject! = self.storyboard.instantiateViewControllerWithIdentifier("vcOptions")
self.showViewController(vc as UIViewController, sender: vc)

Je pense que la réponse réside peut-être dans l'utilisation de UITabbarController.selectedIndex = 1, mais je ne sais pas trop comment l'implémenter.

52
Oliver Spencer

Si votre windowrootViewController est UITabbarController (ce qui est dans la plupart des cas), vous pouvez accéder à tabbar dans didFinishLaunchingWithOptions dans le AppDelegate fichier.

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
}

Cela ouvrira l'onglet avec le index donné (1) dans selectedIndex.

Si vous faites cela dans viewDidLoad de votre firstViewController, vous devez gérer par indicateur ou par un autre moyen de suivre l’onglet sélectionné. Le meilleur endroit pour le faire dans didFinishLaunchingWithOptions de votre fichier AppDelegate ou rootViewController classe personnalisée viewDidLoad.

99
codester

1.Créez une nouvelle classe qui remplace UITabBarController. Par exemple:

class xxx: UITabBarController {
override func viewDidLoad() {
        super.viewDidLoad()
}

2.Ajouter le code suivant à la fonction viewDidLoad ():

self.selectedIndex = 1; //set the tab index you want to show here, start from 0

3.Allez dans le storyboard et définissez la classe personnalisée de votre contrôleur de barre d’onglet sur cette nouvelle classe. (MyVotes1 comme exemple dans la photo)

enter image description here

30
WTIFS

Swift

Vous pouvez ajouter ce code au contrôleur de vue par défaut (index 0) dans votre tabBarController:

    override func viewWillAppear(_ animated: Bool) {
        _ = self.tabBarController?.selectedIndex = 1
    }

Lors du chargement, cela déplace automatiquement l'onglet vers le deuxième élément de la liste, mais permet également à l'utilisateur de revenir manuellement à cette vue à tout moment.

24
Ponyboy

Pour développer la réponse de @ codester, vous n'avez pas besoin de vérifier, puis d'assigner, vous pouvez le faire en une seule étape:

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
}
18
Anorak

Le viewController doit être un enfant de ITabBarControllerDelegate. Il suffit donc d’ajouter le code suivant sur Swift

self.tabBarController?.selectedIndex = 1
14
Leo Paim

Dans une application typique, il existe un UITabBarController qui intègre au moins 3 UIViewController dans ses onglets. Dans ce cas, si vous sous-classez un UITabBarController en tant que YourTabBarController, vous pouvez définir l'index sélectionné simplement en:

selectedIndex = 1 // Displays 2nd tab. The index starts from 0.

Si vous accédez à YourTabBarController à partir de toute autre vue, dans la méthode prepare (for segue :) de ce contrôleur de vue, vous pouvez effectuer les opérations suivantes:

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
            }
        }

J'utilise cette façon de régler l'onglet avec Xcode 10 et Swift 4.2.

4
Pankaj Kulkarni