4

我有一个包含 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];
}
4

2 回答 2

3

您需要在 navigationController (viewcontroller) 上 popToRootViewController - 而不是 TabViewController (self)。

[viewController  popToRootViewControllerAnimated:YES];
于 2012-12-31T03:21:24.023 回答
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]' 看起来是它为我工作的关键。

祝你好运。

于 2013-06-26T06:05:01.893 回答