选择tabbaritem时重置为第一个视图控制器

时间:2012-12-31 02:47:20

标签: iphone

我有一个包含3个项目的标签栏。每个都指向UINavigationController。每个UINavigationController下面都有几个viewControllers。我想在按下任何标签栏项目时重置回导航中的第一个控制器。

我已将TabBarController实施指定为delegate

self.delegate = self以及我的方法(在我的TabBarController实施中运行,可以返回UINavigationControllers

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

显示日志文件,例如

UINavigationController: 0x8a31a90>2012-12-31 02:16:40.035 Demo[6142:c07] 

当我在此方法中尝试popToRootViewControllerpopViewController时,它似乎无效。我没有收到任何错误,但我的viewControllers没有重置。好像我在这里犯了一个非常基本的错误,但我不知道是什么。

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    NSLog(@"%@", viewController);
    [self.navigationController  popToRootViewControllerAnimated:YES];
    [[self navigationController] popViewControllerAnimated:YES];
}

2 个答案:

答案 0 :(得分:3)

你需要在navigationController(viewcontroller)上使用popToRootViewController,而不是TabViewController(self)。

[viewController  popToRootViewControllerAnimated:YES];

答案 1 :(得分:1)

我不确定这是否会有所帮助。我在使用它时遇到了很多麻烦,发现我需要执行以下操作:

在根视图控制器(第一个视图应用程序到来)中,在.h文件中添加一个委托。

@interface MGMProductsViewController : UIViewController <UITabBarControllerDelegate>

将以下代码添加到根视图控制器(.m文件)中的viewDidLoad。

[self.tabBarController setDelegate:self];

使用以下内容覆盖根视图控制器(.m文件)中的方法。

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController  
{  
    if ([viewController isKindOfClass:[UINavigationController class]])
    {
        [(UINavigationController*)viewController popToRootViewControllerAnimated:NO];
    }
}

我无法将此归因于任何人,因为我再也找不到合适的代码。我想我从几个地方把它拼凑起来虽然'[self.tabBarController setDelegate:self]'看起来是它为我工作的关键。

祝你好运。