Методы делегата UITabBarController никогда не вызываются

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

Все мои представления находятся в уникальном StoryBoard, поэтому я получаю TabBar в своем 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 как NSMutableArray и добавляю свой VC выхода из системы:

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

[viewControllers addObject:logout];

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

[tabbar setViewControllers:viewControllers];

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

Если это может помочь, вот мой метод didSelectViewController (который написан в 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");
    }
}

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


person neobagram    schedule 04.02.2014    source источник
comment
Быстрый ответ   -  person Suragch    schedule 18.12.2017


Ответы (2)


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

person kagmanoj    schedule 04.02.2014
comment
Вы имеете в виду установить делегата в другом viewController? РЕДАКТИРОВАТЬ Я спрашиваю об этом, потому что в настоящее время весь код, который вы видите выше в моем сообщении, находится в Appdelegate.m, и этот файл не имеет метода viewDidLoad. - person neobagram; 04.02.2014
comment
Оно работает ! Я устанавливаю делегата в другом viewController, и метод вызывается - person neobagram; 04.02.2014

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

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