2016-01-28 1 views
0

J'ai une application avec 3 onglets. Je veux glisser à droite ou à gauche pour aller à un autre onglet.TabController disparaît lors de l'utilisation du geste de balayage

Mon code:

//Swipe Between Tabs 
    let rightSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:")) 
    let leftSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:")) 
    rightSwipe.direction = .Right 
    leftSwipe.direction = .Left 
    view.addGestureRecognizer(rightSwipe) 
    view.addGestureRecognizer(leftSwipe) 
    //end Swipe 

et la fonction de l'exécuter est

func handleSwipes(sender:UISwipeGestureRecognizer) { 
    if (sender.direction == .Left) { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let vc = storyboard.instantiateViewControllerWithIdentifier("PantryList") 
     let navigationController = UINavigationController(rootViewController: vc) 

     self.presentViewController(navigationController, animated: true, completion: nil) 
    } 
    if (sender.direction == .Right) { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let vc = storyboard.instantiateViewControllerWithIdentifier("ToDoList") 
     let navigationController = UINavigationController(rootViewController: vc) 

     self.presentViewController(navigationController, animated: true, completion: nil) 
    } 
} 

Mon problème est que tabBarController au fond disparaît lorsque swipe est utilisé. De ce que j'ai trouvé il a à voir avec la méthode "presentViewController". Est-ce que c'est ce qui le cause et y a-t-il un moyen de le faire sans perdre le tabBarController? Je ne veux vraiment pas utiliser prepareForSegueWithIdentifier si je n'ai pas à le faire. Cela semble être plus de travail que ce qui doit être fait, à moins que ce soit comme cela qu'il faut le faire.

Répondre

1
if (sender.direction == .Right) { 
    self.navigationController.tabBarController.selectedIndex = 1 
} 
+0

génial, fonctionne comme je le voulais. Sauf une chose ... J'ai bien aimé la transition de l'écran qui glissait du bas quand elle passait. Je n'ai aucune idée de comment faire les transitions et j'ai eu de la chance sur le dernier haha. Comment puis-je récupérer ceci avec la méthode 'selectedIndex:'? –

0

Je pense aussi que votre problème est avec le presentViewController :. En supposant que le code de gestion de balayage est dans le UITabBarController, ce que vous faites ici est de pousser un VC au-dessus de tout le tabcontroller.

Je vais essayer de déplacer le selected view controller's view le long de la prochaine vue VC à afficher (dans la direction donnée par le mouvement de balayage), puis changer la valeur de l'UITabBarController selectedController selected à votre nouveau VC.

1

Bien sûr, c'est parce que vous présentez le contrôleur de vue sur le contrôleur de vue actuel. Pour basculer entre UITabbarControllerviewControllers, vous pouvez utiliser la méthode setSelectedIndex:, dans votre cas, votre premier vc aura 0 index, deuxième et troisième 1 et 2 respectivement. Il suffit de basculer l'index sélectionné sur le balayage, et vous avez terminé! Bonne chance!