iPhone:当用户按下已选择的选项卡时,如何使UINavViewController不弹出视图控制器

iPhone:当用户按下已选择的选项卡时,如何使UINavViewController不弹出视图控制器,iphone,Iphone,我有一个选项卡栏,每个选项卡的视图控制器都是导航控制器。如果按下已选择的选项卡,则会弹出视图控制器。作为标签之一,我不希望这种情况发生。我代表什么?我试着超越 -(UIViewController *)popViewControllerAnimated:(BOOL)animated 在导航控制器中返回0,但这并不能阻止它弹出 您可以通过将UITabBarController子类化,并将其自身设置为UITabBarControllerDelegate来实现这一点 实现tabBarControll

我有一个选项卡栏,每个选项卡的视图控制器都是导航控制器。如果按下已选择的选项卡,则会弹出视图控制器。作为标签之一,我不希望这种情况发生。我代表什么?我试着超越

-(UIViewController *)popViewControllerAnimated:(BOOL)animated

在导航控制器中返回0,但这并不能阻止它弹出

您可以通过将
UITabBarController
子类化,并将其自身设置为
UITabBarControllerDelegate
来实现这一点

实现
tabBarController:shouldSelectViewController:
,测试它是否正在选择您关心的视图控制器,以及是否已经选择了该视图控制器<代码>如果满足上述条件,则返回nil


如果您愿意,我可以编写一些实际的代码,但这应该会让您走上正确的方向。

user74574很接近,但您不应该返回nil,您应该返回NO。是的,从技术上讲,它们在位方面是相同的,位类型有意义,忽略这一点(取决于情况)导致可通过静态分析检测到的警告和/或错误。您希望在委托中实现的功能应该如下所示:

- (BOOL)tabBarController:(UITabBarController *)tabBarController_ shouldSelectViewController:(UIViewController *)viewController {
  if (viewController == tabBarController_.selectedViewController) {
    return NO;
  } else {
    return YES;
  }
}

你不需要为任何东西建立子类来完成这个任务。只需设置标准
UITabBarController
的委托即可。