UITabBarControllerDelegate - 没有为委托触发的方法?

Jam*_*son 2 ios

我有一个带有4个标签的tabbarcontroller.当用户选择其中一个选项卡时,我想为新的视图控制器进行一些设置 - 即... [newVC.databaseid = self.datbaseid];

我已经为tabviewcontroller设置了控制器,因为它是viewdidload中的委托.但是我试图使用3种方法,但只有一种方法似乎开火了.

-(void) tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 
Run Code Online (Sandbox Code Playgroud)

发生火灾,

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
Run Code Online (Sandbox Code Playgroud)

- 似乎没有开火.这是我需要用来设置我新呈现的VC的那个.

只是为了看看会发生什么,我尝试使用 - (BOOL)tabBarController:(UITabBarController*)tabBarController shouldSelectViewController:(UIViewController*)viewController

并且这似乎也没有触发(我返回NO并且它没有任何区别,也没有任何记录与NSLog();

如果没有这些方法被解雇我会认为我设置了委托错了,但是有一种方法可以触发,但有两种方法没有.有任何想法吗?

我已经使用故事板设置了tabbarcontroller.

-(void) tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
    NSLog(@"item selected");
    //THIS DOES GET LOGGED
}

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    NSLog(@"new VC");
    //this does not get logged
}

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
     return NO;
    //this doesnt stop any views being presented
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*son 6

我找到了我的问题 - 我是我的错.我做了一些愚蠢的事.我在类中设置了self.tabbarcontroller.delegate = self的委托,该类是tabbarcontroller的控制器,将其更改为self.delegate = self; 已经解决了这个问题.这是一个愚蠢的错误!奇怪的是第一种方法实际上是如何工作的,但是嘿!