我有一个包含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]
当我在此方法中尝试popToRootViewController
或popViewController
时,它似乎无效。我没有收到任何错误,但我的viewControllers
没有重置。好像我在这里犯了一个非常基本的错误,但我不知道是什么。
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
NSLog(@"%@", viewController);
[self.navigationController popToRootViewControllerAnimated:YES];
[[self navigationController] popViewControllerAnimated:YES];
}
答案 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]'看起来是它为我工作的关键。
祝你好运。