2017-08-22 1 views

Répondre

0

Si vous voulez supprimer des onglets de votre contrôleur de barre d'onglets faire quelque chose comme ceci (Lorsque votre utilisateur n'est pas connecté)

NSInteger indexToRemove = 0; 
NSMutableArray *tabs = [NSMutableArray arrayWithArray:self.tabBarController.viewControllers]; 
[tabs removeObjectAtIndex:indexToRemove]; 
self.tabBarController.viewControllers = tabs; 

lorsque votre utilisateur se connecte à

UIViewController *viewController = [[UIViewController alloc] init]; 
NSMutableArray *tabs = [NSMutableArray arrayWithArray:self.tabBarController.viewControllers]; 
[tabs addObject:viewController]; 
self.tabBarController.viewControllers = tabs; 

Version Swift

Supprimer onglet

let indexToRemove = 0 
if var tabs = self.tabBarController?.viewControllers { 
    tabs.remove(at: indexToRemove) 
    self.tabBarController?.viewControllers = tabs 
} else { 
    print("There is something wrong with tabbar controller") 
} 

Ajouter un onglet

let indexToAdd = 2 
let vc = UIViewController.init() 
if var tabs = self.tabBarController?.viewControllers { 
    tabs.append(vc) // Append at last index of array 
    // tabs.insert(vc, at: indexToAdd) // Insert at specific index 
    self.tabBarController?.viewControllers = tabs 
} else { 
    print("There is something wrong with tabbar controller") 
} 
+0

J'ai essayé cela aussi. n'a pas, aidez ... –

+0

pouvez-vous me dire ce problème causé? –

+0

En supprimant le code de tabulation en obtenant l'erreur à la 2ème ligne comme EXC_BAD_INSTRUCTION (EXC_1386_INVOP, sous-code = 0 * 0) –

1

Belle question!

Vous devez creuser UITabbarController et ses membres (propriétés + fonctions)

maintenant, se concentrer sur ces étapes pour trouver la solution:

  1. Vous pouvez créer autant de TabBar (point) que vous voulez, en utilisant les contrôleurs View associés à Segue. Connectez tous les contrôleurs de vue avec la barre d'onglets (contrôleur) en utilisant segue dans votre story-board.
  2. Maintenant, environ UITabbarController: Il a une propriété (variable) viewControllers (dont un tableau de UIViewController) qui stocke UIViewControllers pour votre contrôleur Tabbar associé en utilisant les éléments UITabbar.
  3. Vous devez stocker une valeur, indiquant l'état de connexion de l'utilisateur, en mémoire permanente (par exemple, UserDefaults, CoreData, ....) du périphérique. Lorsque votre application est lancée, récupérez/récupérez cette valeur (état de connexion de l'utilisateur) du stockage et utilisez-la pour d'autres opérations sur UITabbarController.
  4. Maintenant, concentrez-vous sur l'étape 2: Obtenez tous les contrôleurs de vue par programmation à partir de votre contrôleur de tabulation en utilisant la propriété 'viewControllers` et stockez dans une variable séparée.
  5. Positionner (index) des ViewControllers dans la matrice (Vous pouvez également supprimer ou insérer le contrôleur de vue par programmation) en fonction de vos besoins (état de connexion) et réaffecter le même tableau (variable) à viewControllers propriété du contrôleur de tabulation.

Voici exemple échantillon sur le lancement de l'application:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    if var tabController = self.window?.rootViewController as? UITabbarController, var viewControllers = tabController.viewControllers { 

     let isLoggedIn = <get value from your data storage as bool> 

     if isLoggedIn { 
      viewControllers.remove(at: firstIndex) // By considering you need to remove view controller at index first. It will automatically remove tab from tabbar also. 
      tabController.viewControllers = viewControllers 
      self.window?.rootViewController = tabController 
      // further operations to make your root controller visible.... 
     } 

    } 

} 
+0

Comment initialiser la fenêtre? Désolé, je suis nouveau à ios, [https://stackoverflow.com/questions/28384321/remove-tabbar-item-in-swift] a également renvoyé ce lien, mais ce n'est pas travaillé –

+0

Dans mon code - 'self.window?' est la propriété de 'AppDelegate'. Vous n'avez pas besoin de l'initialiser. Créez simplement votre contrôleur de tabulation à partir du storyboard. Affectez le storyboard principal et la structure de la racine en tant que tabbar à votre projet à partir de votre storyboard. Ce code fonctionne automatiquement. – Krunal

+0

Je me connecte en tant que contrôleur racine. L'utilisateur s'est connecté avec succès alors TabBarController est ouvert.J'ai déjà ajouté tous les onglets dans TabBarController de storyBoard et son fonctionnement bien. Maintenant, je veux montrer et cacher les contrôleurs de vue en fonction du rôle de l'utilisateur (que je reçois du serveur dans la réponse de connexion) –