永远不会调用UITabBarController委托方法

时间:2014-02-04 10:19:44

标签: ios objective-c uitabbarcontroller appdelegate

我正在重构我的iPad应用程序而不是NavigationBar上的按钮,我想将我的Logout按钮作为TabBar按钮项。

我的所有观点都在一个独特的StoryBoard中,所以我通过这种方式在我的Appdelegate.m中获取了TabBar:

// 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];

最后,我使用新数组设置tabbar 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");
    }
}

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:9)

[self setDelegate:self];放入ViewDidLoad或对象初始化的位置

答案 1 :(得分:-2)

尝试初始化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];