0

我有一个包含 4 个选项卡的 UITabBarController。在每个选项卡上,导航栏中应该有一个图标,允许用户打开我的设置视图。我通过为这 4 个选项卡创建一个父类来解决这个问题,并在 viewDidLoad 方法中添加了一个图标,该方法调用了一个执行推送的方法。到目前为止,此解决方案按预期工作。

但 :-)!现在我想让这个设置视图只打开一次。我目前拥有的解决方案允许用户同时在所有 4 个选项卡上打开设置视图。我不希望这样 - 有没有办法让设置只打开一次?

这是我的代码(放在父文件中)

-(void)viewDidLoad
{
    UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:self action:@selector(showSettings)];
}

- (void)showSettings
{
    [self.navigationController pushViewController:[[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil] animated:YES];
}

有什么建议吗?

4

2 回答 2

1

假设您的所有选项卡都是UINavigationControllers,则在-showSettings其他选项卡中遍历并弹出导航视图控制器(如果它是SettingsViewController.

- (void)showSettings
{
    for (UINavigationController *navController in self.tabBarController.viewControllers)
        if ([navController.viewControllers.lastObject isKindOfClass:[SettingsViewController class]])
             [navController popViewControllerAnimated:NO];
    [self.navigationController pushViewController:[[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil] animated:YES];
}
于 2012-08-21T11:40:47.213 回答
0

如果我理解正确,每个选项卡都有 4 个 UINavigationController,并且他们推送的每个 rootView 在导航栏中都有这个图标,对吧?如果是这样,一旦用户导航到他的设置视图,那么您需要向每个 UINavigationController 发送一条消息,告诉它从其 UINavigationBar 中删除 Settings UIBarButtonItem。

现在 UINavigationController 并不“拥有”视图控制器使用的所有 UINavigationItem,因此它必须向它当前拥有的所有视图控制器发送消息并告诉他们应该删除按钮。

您可以在展示设置视图时执行此操作,这样当用户返回主视图时,按钮就会消失,并且它也会从所有其他视图控制器中消失。

于 2012-08-21T11:36:44.623 回答