UITabBar在推送到新视图控制器后消失

时间:2014-07-08 14:56:23

标签: ios objective-c

我有UITabBarController,有3个按钮。第二个按钮指向ViewController1,该ViewController2连接到另一个名为ViewController2的视图。在我点击ViewController1中的按钮后,我再次以编程方式显示ViewController1,除了一件事情之外,这是完美的。在我“到达”ViewController1后,标签栏消失了。

我正在使用此方法导航回- (void)presentViewControllerAnimated:(BOOL)animated { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"storyboard" bundle:nil]; UINavigationController *firstViewNavigationController = [storyboard instantiateViewControllerWithIdentifier:@"destination"]; [self presentViewController:firstViewNavigationController animated:animated completion:nil]; } 。 (我确切地导航到它的导航控制器,但已经尝试了视图)

- (void)didTapButton:(id)sender {

    UIButton *button = (UIButton *)sender;

    CGPoint pointInSuperview = [button.superview convertPoint:button.center toView:self.tableView];

    [self presentViewControllerAnimated:YES];
}

我在这里称之为第一种方法

ViewController2

此方法会隐藏-(BOOL)hidesBottomBarWhenPushed { return YES; } 中的标签栏,我已经尝试过没有它,因此没有问题。

{{1}}

我无法弄清楚为什么会发生这种事情,我认为这是一个公平的解决方案,当我需要提出观点时,这种解决方案已经好几次了。我已经读过它可能发生在segues中,但我正在使用没有segues的代码。

2 个答案:

答案 0 :(得分:4)

实际上你的代码工作正常。从SecondViewController呈现FirstViewController时,不应该有标签栏。因为当你调用instantiateViewControllerWithIdentifier时,它基本上会创建一个该视图控制器的新实例,当然,没有标签栏。

返回第一个视图控制器的正确方法是弹出SecondViewController(如果以模态方式呈现,则将其关闭)。所以你的最终代码应该是这样的

- (void)didTapButton:(id)sender {
    // If this view controller (i.e. SecondViewController) was pushed, like in your case, then       
    [self.navigationController popViewControllerAnimated:YES];

    // If this view controller was presented modally, then
    // [self dismissViewControllerAnimated:YES completion:nil];
}

当然,故事板中的视图控制器层次结构必须如下:

                                                 
                        -- UINavigationController -> FirstViewController -> SecondViewController
                        | 
->UITabBarController____|
                        -...
                        -...

答案 1 :(得分:1)

我尝试了同样的结果并得到了相同的结果。

我的解决方案很简单,推动这样做:

UINavigationController *firstViewNavigationController = [storyboard instantiateViewControllerWithIdentifier:@"destination"];

firstViewNavigationController.hidesBottomBarWhenPushed = true; // Insert this and set it to what you want to do

[self presentViewController:firstViewNavigationController animated:animated completion:nil];    

然后删除

-(BOOL)hidesBottomBarWhenPushed
{
    return YES;
}