UITabBar (contrôleur) - obtenir l'index de taraudé?
J'ai une application de barre d'onglets et j'ai besoin de savoir quand et quel bouton un utilisateur tape sur la barre d'onglets pour afficher les notifications appropriées et autres.
En bref: Comment pourrais-je détecter l'index D'un uitabbaritem tapé sur un UITabBar?
Merci d'avance!
5 réponses
La réponse dépend si UITabBar est géré par un UITabBarController ou non.
Cas 1-UITabBar est déjà géré par un UITabBarController
Mettre en œuvre le protocole UITabBarControllerDelegate
. Plus précisément la méthode tabBarContoller:didSelectViewController:
. Définissez une instance de votre classe qui implémente le protocole en tant que delegate
du UITabBarController
.
- (void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController {
NSUInteger indexOfTab = [theTabBarController.viewControllers indexOfObject:viewController];
NSLog(@"Tab index = %u (%u)", (int)indexOfTab);
}
Dans ce cas, vous devez être conscient de la situation particulière où vous avez suffisamment de contrôleurs dans le contrôleur d'onglet pour provoquer le Onglet "Plus" à afficher. Dans ce cas, vous recevrez un appel à tabBarController:didSelectViewController:
avec un contrôleur de vue qui n'est pas dans la liste (c'est une instance d'une classe UIKit interne UIMoreNavigationController). Dans ce cas, le indexOfTab
dans mon échantillon sera NSNotFound
.
Cas 2-UITabBar N'est pas déjà géré par un UITabBarController
Mettre en œuvre le protocole UITabBarDelegate
. Plus précisément la méthode tabBar:didSelectItem:
. Définissez une instance de votre classe qui implémente le protocole en tant que delegate
de la UITabBar
.
- (void)tabBar:(UITabBar *)theTabBar didSelectItem:(UITabBarItem *)item {
NSUInteger indexOfTab = [[theTabBar items] indexOfObject:item];
NSLog(@"Tab index = %u", (int)indexOfTab);
}
EDIT: modifié les variables de paramètre de méthode pour éliminer l'avertissement de compilation de L'OP sur tabBarController
étant caché.
Il existe une méthode définie dans le protocole UITabBarDelegate
appelée tabBar:didSelectItem:
, qui vous informera de laquelle et quand un UITabBarItem
est sélectionné (exploité).
SWIFT 3:
// somewhere inside your TabBarViewController
//...
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
let indexOfTab = tabBar.items?.index(of: item)
print("pressed tabBar: \(String(describing: indexOfTab))")
}
Je l'ai fait comme ça : C'est dans une classe personnalisée qui étend UITabBarController
.h
@interface CustomTabBarController : UITabBarController<UITabBarDelegate>
.m
-(void)tabBar:(UITabBar *)theTabBar didSelectItem:(UIViewController *)viewController
{
NSLog(@"Tab index = %@ ", theTabBar.selectedItem);
for(int i = 0; i < theTabBar.items.count; i++)
{
if(theTabBar.selectedItem == theTabBar.items[i])
{
NSLog(@"%d",i);// this will give the selected tab
}
}
//NSlog(@"Items = %@", theTabBar.items[0]);
}
SWIFT 4:
Je préfère
// somewhere inside your TabBarViewController
//...
func tabBarController(_ tabBarController: UITabBarController,
shouldSelect viewController: UIViewController) -> Bool{
let index = tabBarController.viewControllers?.index(of: viewController)
return true// you decide
}