我有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的代码。
答案 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;
}