web-dev-qa-db-fra.com

Définition de l'onglet par défaut lors de l'utilisation de storyboards

Quelqu'un peut-il me dire comment définir l'onglet par défaut lors de l'utilisation de storyboards dans iOS. Je n'arrive pas à comprendre comment y parvenir.

Je vous remercie

48
user1145581

Vous pouvez utiliser l'une de ces deux méthodes: 

tabBar.items = tabBarItems;
tabBar.selectedItem = [tabBarItems objectAtIndex:0];

ou une méthode directe de l'objet

[tabBar setSelectedItem:myUITabBarItem];

ou vous pouvez les combiner pour faire ceci:

tabBar.items = tabBarItems;
[tabBar setSelectedItem:[tabBarItems objectAtIndex:0]];

mais je n'ai pas encore testé cette méthode, j'espère que cela aidera!

11
Trevor Rudolph

Bien que vous puissiez définir par programmation l'onglet initial sélectionné comme les autres réponses, pour obtenir le même résultat dans votre story-board sans toucher au code, procédez comme suit:

  1. Sélectionnez le contrôleur de la barre d'onglets dans l'interface du scénarimage.
  2. Afficher l'inspecteur d'identité dans le panneau Utilitaires
  3. Ajouter un nouvel "attribut d'exécution défini par l'utilisateur"
  4. Définissez le chemin de clé sur "selectedIndex"
  5. Définissez le type sur "Nombre"
  6. Définissez la valeur sur l'index de l'onglet que vous souhaitez sélectionner (une valeur de 1 sélectionnerait le deuxième onglet par exemple).
  7. Enregistrez le Storyboard, construisez et exécutez l'application

Cela devrait ressembler à cela une fois que vous avez accompli les étapes ci-dessus:

117
Joshua Finch

Cela peut sembler excessif pour certains de la sous-classe UITabBarController, mais, je pense que cela fournit la solution la plus propre.

  1. Créer BaseTabBarController.Swift
  2. Ajoutez un @IBInspectable et définissez-le dans viewDidLoad:

    class BaseTabBarController: UITabBarController {
    
        @IBInspectable var defaultIndex: Int = 0
    
        override func viewDidLoad() {
            super.viewDidLoad()
            selectedIndex = defaultIndex
        }
    
    }
    
  3. Dans le storyboard, définissez-vous UITabBarController comme nouvelle sous-classe:

enter image description here

  1. Accédez à l'inspecteur Attributes add définissez la nouvelle propriété Index par défaut :

enter image description here

  1. ta-da! (:
64
Aviel Gross
  1. Créer une nouvelle sous-classe de fichier de UITabBarController;
  2. Ajoutez ceci à la fin de viewDidLoad:

    self.selectedIndex = 1;

  3. Définissez ce nouveau fichier comme classe personnalisée dans la UITabBarController de votre storyboard.

Vous avez terminé.

29
maxagaz

Le code suivant a fonctionné pour moi:

UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
tabBarController.selectedIndex = 2;
22
Rahul Singh

Dans la viewDidLoad() de la TabBarController, définissez selectedIndex sur ce que vous voulez. (0 serait le premier, 3 serait le quatrième, etc.)

2
jake

dans appdelegate, trouvez la fonction applicationDidBecomeActive et ajoutez ces lignes

let tabBarController = self.window?.rootViewController as! UITabBarController
tabBarController.selectedIndex = 0 // any index you want
1
zizutg

Vous pouvez y parvenir via Xcode 8 ou version ultérieure (juste testé et ne sachant pas s'il est disponible avant cette version)

Faites les étapes comme dit @Joshua Finch mais:

  1. Sélectionnez l'élément de barre à la place du TabBar
  2. Passé à "Attribut d'exécution défini par l'utilisateur"
  3. Ajouter une nouvelle clé 
  4. Nommez-le "sélectionné"
  5. Définissez son type sur boolean et choisissez true/ou cochez la case 
1

Ma variante est appropriée lorsque vous voulez changer simplement le contrôleur sélectionné par défaut, sans autre personnalisation. Ajoutez simplement le suivi catégorie:

//  UITabBarController+DefaultPage.h
#import <UIKit/UIKit.h>

@interface UITabBarController(DefaultPage)

@end


//  UITabBarController+DefaultPage.m
#import "UITabBarController+DefaultPage.h"

@implementation UITabBarController(DefaultPage)

- (void)viewDidLoad {
    [super viewDidLoad];

    self.selectedIndex = 1;
}

@end

p.s: Je préfère @ joshua-finch répondre

1
WINSergey

En me basant sur la réponse de Aviel Gross, je souhaitais simplement implémenter cela pour un UITabBar, par opposition à UITabBarController. Cela peut être fait comme suit:

class BaseTabBar: UITabBar {

    @IBInspectable var defaultIndex: Int = 0 {
        didSet {
            self.selectedItem = self.items?[defaultIndex]
        }
    }
}
0
ThomasHaz

Si vous naviguez vers votre UITabBarController à partir de, par exemple. un écran de connexion, il serait peut-être moins pénible de définir la sélection à cet emplacement:

        let tabs = self.storyboard?.instantiateViewController(withIdentifier: "tabs") as! UITabBarController
        tabs.selectedIndex = 1
        self.present(tabs, animated:false)
0
Anton Duzenko