Actuellement, j'ai un contrôleur de barre d'onglets connecté à un contrôleur de table. J'essaie d'aller en haut de la table lorsque j'appuie sur la barre d'onglets. Je sais comment atteindre le sommet de la table. Je ne sais tout simplement pas comment effectuer une action lorsque l'élément est enfoncé.
Vous devez utiliser UITabBarDelegate
avec la méthode didSelectItem
. Utilisez-le comme n'importe quel délégué standard:
class yourclass: UIViewController, UITabBarDelegate {
func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
//This method will be called when user changes tab.
}
}
Et n'oubliez pas de définir votre délégué de barre d'onglets sur self
dans le contrôleur de vue.
Voici une réponse à cette question
Fondamentalement, vous faites ceci:
Implémentez la méthode didSelectItem, quelque chose comme ceci:
-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
if(item.tag == 1) {
// Code for item 1
}
else if(item.tag == 2) {
// Code for item 2
}
}
Cela vous donnera accès à chaque événement sélectionné de l'élément d'onglet. J'espère que ça aide!
Dans Swift:
func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
if(item.tag == 1) {
// Code for item 1
} else if(item.tag == 2) {
// Code for item 2
}
}
Swift 3
class yourclass: UIViewController, UITabBarDelegate {
func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
print("Test")
}
}
Et n'oubliez pas de définir votre délégué tabBar sur self dans viewDidLoad
override func viewDidLoad(){
super.viewDidLoad()
<YOUR TAB BAR NAME>.delegate = self
}
J'avais du mal à implémenter les autres réponses ici. Ceci est une réponse plus complète. Il suppose que vous utilisez un UITabBarController
(par défaut si vous créez une nouvelle application à onglets). Cette solution imprimera un message chaque fois qu'un bouton de l'onglet du contrôleur de vue est appuyé.
Créez un nouveau fichier Swift appelé MyTabBarController.Swift . Collez le code suivant.
import UIKit
class MyTabBarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// tell our UITabBarController subclass to handle its own delegate methods
self.delegate = self
}
// called whenever a tab button is tapped
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if viewController is FirstViewController {
print("First tab")
} else if viewController is SecondViewController {
print("Second tab")
}
}
}
Sur votre storyboard, sélectionnez le contrôleur de la barre d'onglets. Ensuite, dans l'inspecteur d'identité, définissez le nom de la classe sur MyTabBarController
(c'est-à-dire le nom de la classe dans le code ci-dessus).
C'est tout. Vous pouvez exécuter votre application maintenant et être averti chaque fois que l'utilisateur appuie sur un élément de la barre d'onglets.
Si vous devez exécuter une méthode sur un robinet, vous pouvez faire quelque chose comme ce qui suit dans la méthode didSelect
.
if let firstVC = viewController as? FirstViewController {
firstVC.doSomeAction()
}
Vous pouvez faire en sorte que le FirstViewController
implémente le délégué et gère tout là-bas. De cette façon, vous n'auriez pas besoin de créer de sous-classe UITabBarController
personnalisée et de la définir dans IB. Cependant, avoir un enfant pour faire le travail des parents semble être le mauvais endroit pour le faire. Quoi qu'il en soit, voici:
class FirstViewController: UIViewController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
tabBarController?.delegate = self
}
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
// ...
}
}
La méthode didSelect
ci-dessus est appelée quel que soit l'onglet sélectionné.
UITabBarControllerDelegate
documentation
Une autre solution consiste à faire simplement quelque chose dans viewDidAppear
dans le contrôleur de vue que l'onglet affiche.
First Tab View Controller
import UIKit
class FirstViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("First tab")
}
}
Second Tab View Controller
import UIKit
class SecondViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("Second tab")
}
}