UITabBarController делегат методы не вызываются


В настоящее время я рефакторингую свое приложение для iPad, и вместо кнопки на панели навигации я хотел бы поместить мою кнопку выхода в качестве элемента кнопки на панели вкладок.

Все мои представления находятся в уникальной раскадровке, поэтому я получаю свою панель вкладок в своем Appdelegate.m Таким образом:

// Add logout tab to tabbar
storyboard                      = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UITabBarController *tabbar      = (UITabBarController *)[storyboard instantiateViewControllerWithIdentifier:@"tabbar"];
[tabbar setDelegate:self];

Конечно, протокол делегата объявлен в моем Appdelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>

После этого я создаю пустой viewController, чтобы создать свою вкладку выхода:

UIViewController *logout        = [[UIViewController alloc]init];

Затем я получаю tabbar viewControllers as NSMutableArray и добавить мой выход VC:

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[tabbar viewControllers]];

[viewControllers addObject:logout];

Наконец, я установил tabbar viewControllers с моим новым массивом:

[tabbar setViewControllers:viewControllers];
Я думаю, что эти шаги правильны. Так почему же didSelectViewController не вызывается при изменении отображаемой вкладки ?

Если это может помочь, вот мой метод didSelectViewController (который является write in AppDelegate.m)

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    NSLog(@"onglet sélectionné : %d / %d", [tabBarController selectedIndex], [[tabBarController viewControllers]count]);
    //select the index where your logout button is
    if ([tabBarController selectedIndex] == [[tabBarController viewControllers]count]-1) {
        NSLog(@"logout");
    }
}

Заранее спасибо за вашу помощь !

2 5

2 ответа:

Поместите [self setDelegate:self]; в ViewDidLoad или где-то, где объект get инициализируется

Попробуйте инициализировать объект tabbar;

// Add logout tab to tabbar
storyboard                      = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UITabBarController *tabbar      = [[UITabBarController alloc] init];
tabbar      = (UITabBarController *)[storyboard instantiateViewControllerWithIdentifier:@"tabbar"];
[tabbar setDelegate:self];