TabBarController委托不起作用

时间:2010-03-03 08:05:27

标签: iphone objective-c uitabbarcontroller

任何人都可以帮助我 当我使用我的UITabBarController委托时,它无法工作..

我调用了这样的委托方法..

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{

 [self.navigationController popToRootViewControllerAnimated:NO];
}

5 个答案:

答案 0 :(得分:12)

如果您正在做的是继承UITabBarController,那么......奇怪的是......您可以通过将自己设置为委托来使其工作:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.delegate = self;
}

然后,didSelectViewController动作将正常触发:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    NSLog(@"View Changed");
}

不要忘记将您的UITabBarControllerDelegate类添加到.h文件中:

@interface MyTabBarController : UITabBarController <UITabBarControllerDelegate>

@end

答案 1 :(得分:2)

如果您通过扩展UITabBarController并尝试以编程方式更改标签栏选择索引来使用标签栏自定义,那么它将不会调用委托。

请参阅内部注释&#34; UITabBarDelegate&#34;:

// Note: called when a new view is selected by the user (but not programmatically)

答案 2 :(得分:1)

这可能对您有所帮助

-(void)applicationDidFinishLaunching:(UIApplication *)application {
    tabBarController.delegate=self;
    // Add the tab bar controller's current view as a subview of the window
    [window addSubview:tabBarController.view];
}

答案 3 :(得分:0)

Read the documents以深入了解导航控制器,tabBar控制器以及视图和导航层次结构之间的关系。

然后查看您提供的代码。哪个视图/控制器是容器?您正在弹出self的navigationController,这与tabBarController不同。如果您希望在标签之间切换,我认为您实际上不需要此方法。

尝试评论此方法。它是UITabBarController委托协议中的可选方法。如果你注释掉它,你应该得到选项卡控制器的默认行为,这应该是选择适当的viewController并切换到新视图。

如果您希望在视图控制器之间切换时采取某些操作,通常只需要使用此方法。

答案 4 :(得分:0)

指定

.h文件中的

UITabbarcontrollerDelegate

然后

-(void)applicationDidFinishLaunching:(UIApplication *)application {

tabBarController.delegate=self;

// Add the tab bar controller's current view as a subview of the window
[window addSubview:tabBarController.view];
}