Disons que j'ai une vue UIButton
dans un onglet dans mon application iPhone et que je souhaite qu'elle ouvre un autre onglet dans la barre d'onglets de TabBarController
. Comment écrire le code pour faire cela?
Je suppose que je décharge la vue existante et charge une vue d'onglet spécifique, mais je ne sais pas comment écrire le code exactement.
iphone
objective-c
ios
uitabbarcontroller
appareil photo
la source
la source
Réponses:
Essayez ce code en Swift ou Objective-C
Rapide
Objectif c
la source
-setSelectedViewController:
.Notez que les onglets sont indexés à partir de 0. Ainsi, l'extrait de code suivant fonctionne
va au cinquième onglet de la barre.
la source
Mon avis est que l'
selectedIndex
utilisationobjectAtIndex
n'est pas forcément la meilleure façon de changer d'onglet. Si vous réorganisez vos onglets, une sélection d'index codée en dur peut perturber le comportement de votre ancienne application.Si vous disposez de la référence d'objet du contrôleur de vue vers lequel vous souhaitez basculer, vous pouvez faire:
Bien sûr, vous devez vous assurer que c'est
myViewController
vraiment dans la liste destabBarController.viewControllers
.la source
Vous pouvez simplement définir la
selectedIndex
propriété sur UITabBarController sur l'index approprié et la vue sera modifiée tout comme l'utilisateur a appuyé sur le bouton de l'onglet.la source
selectedIndex
ne fonctionne pas non plus pour moi avec des index> 4, mais leselectedViewController
fait.J'ai essayé ce que Disco S2 suggérait, c'était proche mais c'est ce qui a fini par marcher pour moi. Cela a été appelé après avoir terminé une action dans un autre onglet.
la source
Pour les cas où vous pouvez déplacer les onglets, voici du code.
la source
Comme la solution de Stuart Clark mais pour Swift 3:
Utilisez-le comme ceci:
Veuillez noter que mon tabController est lié à viewControllers derrière navigationControllers. Sans navigationControllers, cela ressemblerait à ceci:
la source
Je voulais être en mesure de spécifier quel onglet était affiché par classe plutôt que par index car je pensais que cela constituait une solution robuste qui dépendait moins de la façon dont vous connectez IB. Je n'ai pas trouvé les solutions de Disco ou de Joped pour fonctionner, j'ai donc créé cette méthode:
vous l'appelez comme ceci:
J'espère que cela est utile à quelqu'un
la source
Mon problème est un peu différent, je dois passer d'un childViewController dans le 1er tabBar à home viewController du 2nd tabBar. J'utilise simplement la solution fournie à l'étage:
Cependant, lorsqu'il est passé à la page d'accueil du 2nd tabBar, le contenu est invisible. Et quand je débogue, viewDidAppear, viewWillAppear, viewDidLoad, aucun d'entre eux n'est appelé. Mes solutions consistent à ajouter le code suivant dans UITabBarController:
la source
Utilisation dans le
AppDelegate.m
fichier:la source
Comme la solution de Stuart Clark mais pour Swift 3 et en utilisant l'identifiant de restauration pour trouver l'onglet correct:
Utilisez-le comme ceci ("Humans" et "Robots" doivent également être définis dans le storyboard pour un viewController spécifique et son ID de restauration, ou utilisez l'ID du storyboard et cochez "utiliser l'ID du storyboard" comme ID de restauration):
Veuillez noter que mon tabController est lié à viewControllers derrière navigationControllers. Sans navigationControllers, cela ressemblerait à ceci:
la source
la source