2017-05-27 1 views
0

Je veux savoir quand l'onglet dans la barre d'onglets change, afin que je puisse le signaler à Firebase Analytics. Comment puis-je faire cela.iOS sur la barre d'onglets modifier

J'ai essayé

override func viewDidAppear(_ animated: Bool) { 
    Analytics.logEvent("projects_open", parameters: [:]) 
} 

Mais j'ai le sentiment que ce serait aussi courir quand je vais revenir d'un autre ViewController. J'ai besoin de quelque chose qui peut détecter quand un onglet est ouvert, pas quand il devient visible.

Y a-t-il une autre fonction qui fonctionne pour cela?

Répondre

0

Il y a une fonction de délégué sur UITabBarController pour détecter qu'un onglet a été sélectionné:

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) 

Vous pouvez également accéder à l'index sélectionné comme ceci:

tabController.selectedIndex 
+0

Ai-je besoin d'ajouter un sur chaque onglet ou puis-je le mettre dans l'AppDelegate? – alvarlagerlof

+0

Votre contrôleur de tabulation est-il créé dans le délégué de l'application? Si oui, vous devez d'abord affecter la propriété delegate (tabbarController.delegate = self), puis implémenter cette fonction dans appdelegate. Il sera appelé chaque fois que l'utilisateur change d'onglet. Voici la documentation pour le protocole de délégué: https://developer.apple.com/reference/uikit/uitabbarcontrollerdelegate – bughana

+0

Je l'ai fait dans mon storyboard, donc je suppose que je mais un dans chaque onglet – alvarlagerlof

1

Swift 3.0

Utilisation ces deux méthodes déléguer, et n'oubliez pas d'assigner un délégué à soi-même.

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { 
    //MARK: - UITabBarControllerDelegate 
} 

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 
    //MARk: - UITabBarDelegate 
} 
0

Si vous utilisez uniquement tabBar.in viewDidLoad délégué défini tabBar à l'auto et

override func tabBar(_ tabBar: UITabBar, didSelect item:UITabBarItem) 
{ 
     //MARk: - UITabBarDelegate 
if(tabBar.selectedIndex == 0) { 
//Do something 
} 
else if(tabBar.selectedIndex == 1) { 
//Do something. 
} 
} 

et si vous utilisez tabBarController utiliser ce délégué marque method.And comme auto

func tabBarController(_ tabBarController: UITabBarController, 
didSelect viewController: UIViewController) { 
} 

Très important Note:

Si vous voulez Pour enregistrer le tabBar précédemment sélectionné, vous devez l'enregistrer sur votre chemin. Utilisez flag ou NSUserDefaults selon votre souhait. La raison pour laquelle je l'ai mentionné parce que je devais vérifier quel onglet a été sélectionné dans View dans un de mes projets.