任何人都可以帮助我 当我使用我的UITabBarController委托时,它无法工作..
我调用了这样的委托方法..
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
[self.navigationController popToRootViewControllerAnimated:NO];
}
答案 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];
}