Iphone 单击选项卡栏时,将UINavigationController重置为第一个控制器

Iphone 单击选项卡栏时,将UINavigationController重置为第一个控制器,iphone,objective-c,ios,Iphone,Objective C,Ios,我的应用程序有3个选项卡栏项,每个项都映射到一个单独的视图控制器。我的问题是第一个控制器是一个UINavigation控制器,它可以深入3级。我对导航没有任何问题,但当我单击不同的选项卡栏项目,然后返回到第一个选项卡栏项目(带有UINav控制器的项目)时,我希望它重置回导航序列中的第一个控制器 我读到你必须做一些事情,比如: - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { [[self navi

我的应用程序有3个选项卡栏项,每个项都映射到一个单独的视图控制器。我的问题是第一个控制器是一个UINavigation控制器,它可以深入3级。我对导航没有任何问题,但当我单击不同的选项卡栏项目,然后返回到第一个选项卡栏项目(带有UINav控制器的项目)时,我希望它重置回导航序列中的第一个控制器

我读到你必须做一些事情,比如:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
    [[self navigationController] popViewControllerAnimated:NO];
}
但是我不确定我应该把这个方法放在哪里。谁是选项卡栏控制器的代理?它是在AppDelegate中设置的。。。应该放进去吗


谢谢。

您需要将自己设置为选项卡栏的代理并执行 –选项卡栏:选择项: 您可以向导航控制器询问其视图 [[self-navigationController]ViewController]返回UIViewController的NSArray,然后弹出阵列中的每个视图控制器,直到到达根视图


当然,在您的AppDelegate中,当您创建UITabBarController时,您可以将选项卡栏控制器的委托设置为self(即AppDelegate)。然后,您可以将tabBar:didSelectItem:方法放在AppDelegate中,并且应该在用户点击UITabBarItem时调用它。我将在AppDelegate中创建一个实例变量属性,并保留对用于Nav控制器选项卡(我们称之为tabBarItemForNavControllerTab)的UITabArItem的引用。您还应该具有对位于第一个选项卡中的nav控制器的引用,以便您可以从AppDelegate控制它(我们称之为navControllerInFirstTab)

-(void)选项卡栏:(UITabBar*)选项卡栏didSelectItem:(UITabBarItem*)项
{
if(项!=self.tabBarItemForNavControllerTab){
[self.navControllerInFirstTab popToRootViewControllerAnimated:NO];
}
}


您可以在UINavigationController上使用popToRootViewControllerAnimated:,而不是单独从堆栈中弹出每个控件。

Hmm。。。这很有道理,但我似乎无法让tabBar:didSelectItem:做出响应(我现在只有一个NSLog()语句,但没有显示任何内容)。我设置了[tabBarController setDelete:self];但还是没有。好吧,我知道了。我不得不使用
-(void)tabBarController:(UITabBarController*)tabBarController选择viewController:(UIViewController*)viewController
。谢谢 - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { if (item != self.tabBarItemForNavControllerTab) { [self.navControllerInFirstTab popToRootViewControllerAnimated:NO]; } }