iOS - 选择选项卡时的后退按钮

时间:2012-08-30 06:24:50

标签: ios uinavigationcontroller tabs

我有一个UITabBarController。当我选择除第一个之外的选项卡时,我希望隐藏标签栏(我通过hidesBottomBarWhenPushed实现)和导航栏有一个后退按钮(不是普通的,但默认为箭头)(以进入第一个选项卡)。我如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

我将在下面回答你的问题,但我不得不说这是一个非常非标准的用户界面,它混合了隐喻。如果你真的想要推送到不同的视图控制器,你真的应该使用标签栏。您可能应该只使用简单的按钮转到辅助视图控制器。如果Apple拒绝使用标签栏的应用程序,就像你想象的那样,我不会感到惊讶。

无论如何,要回答您的问题,您不希望尝试向辅助视图添加“后退”按钮,而只是想要正确实现导航控制器。然后,当您按下辅助视图时,会自动获得后退按钮。而且你也不必担心与隐藏标签栏相关的愚蠢,因为当你推到另一个视图时,它也会被推掉。

所以,考虑这个例子,你有一个带有按钮“One”,“Two”和“Three”的标签栏。但是,不是一个合适的标签栏控制器配置,你有这样的东西,其中“一个”在导航控制器上,并有一个简单的标签栏用户界面控制,如果你碰巧点击第二个或第三个选项卡,它将只是推送到相应的视图。因此,从逻辑上讲,它可能看起来像这样(即使你没有使用故事板,这可能有助于可视化潜在的配置):

Sample storyboard

因此,在主视图控制器(“One”)上,您需要添加一个带有IBOutlet的标签栏:

@property (weak, nonatomic) IBOutlet UITabBar *tabBar;

然后我在viewDidLoad中配置标签栏,例如:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tabBar.delegate = self;
    self.tabBar.selectedItem = [self.tabBar.items objectAtIndex:0];
}

显然,视图控制器本身需要是UITabBarDelegate,你需要didSelectItem来执行推送segue或使用navigationController到{{1} }}。而且,显然,您需要使用标签栏按钮上的实际标签更改pushViewController@"Two"的引用,但希望这可以为您提供这样的想法:

@"Three"

我还希望主视图控制器确保在弹出后重新出现时将所选项目设置回第一项:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
    if ([item.title isEqualToString:@"Two"])
    {
        // put code for pushing to second view controller here
    }
    if ([item.title isEqualToString:@"Three"])
    {
        // put code for pushing to third view controller here
    }
}

无论如何,如果你这样做,就不会隐藏标签栏(因为它不再是控制器,而只是第一个标签上的用户界面元素)。这可能是实现所需用户界面的最简单方法。