导航控制器干扰TabBar控制器

时间:2017-01-13 01:03:42

标签: ios swift uinavigationcontroller uitabbarcontroller segue

我有一个菜单,它只是一个选项卡上的桌面视图。当您选择其中一个表格单元格时,它将分割为嵌入在导航控制器中的视图控制器。我已经为此导航控制器添加了一个“完成”按钮,并创建了一个返回菜单的segue。但是现在菜单没有显示tabBar,它现在显示一个带有“后退”按钮的导航栏。

这是菜单(标签栏的一部分)只是一个表格视图

enter image description here

这是单击tableview单元格时显示的页面

enter image description here

单击“完成”

后再次显示此菜单

enter image description here

点击完成后,我希望它返回到第一个屏幕截图中显示的菜单。我试图使用界面构建器,但我想我可以创建一个类,然后通过代码返回菜单。

任何想法如何解决这个问题?

-----编辑-----

这是没有“完成”按钮的支持页面

enter image description here

------编辑-----

这是流程布局,对不起它在小屏幕笔记本电脑atm上的凌乱工作

enter image description here

2 个答案:

答案 0 :(得分:1)

您应该使用"显示(例如推送)" segue而不是" Push"。这允许它在堆栈中正确显示。

使用" Push"要求现有的屏幕存在于导航控制器内部,它不会在第一次加载时出现。通过使用" Push"它正在将控制器移动到导航控制器堆栈中,在完成后按下导航栏。

使用"显示(例如推送)" segue选项,系统将根据您当前的视图层次结构选择使用模态演示或导航控制器推送。

显示(例如推送):

enter image description here

注意:如果您使用模型演示文稿显示视图,则需要使用

[self dismissViewControllerAnimated:YES completion:nil]; 

而不是

[self.navigationController popViewControllerAnimated:YES]; 

您可以快速检查以选择正确的方法:

if (self.navigationController) {
    [self.navigationController popViewControllerAnimated:YES];
}
else {
    [self dismissViewControllerAnimated:YES completion:nil];
}

这将允许您以多种方式显示屏幕,而无需进行任何其他检查

答案 1 :(得分:1)

我刚刚意识到菜单标签上没有导航栏。您需要做的就是嵌入导航控制器。如果它不起作用,请告诉我。

enter image description here

override  func tableView(_ tableView: UITableView, didSelectRowAt
 indexPath: IndexPath){
    if(indexPath.row == THE_ROWNUMBER_OF_YOUR_SUPPORT_PAGE){
        let displaySupportPage = self.storyboard?.instantiateViewController(withIdentifier: "SuppportPage") as! ChooseSalonTVC
        self.navigationController?.pushViewController(displaySupportPage, animated: true)
    }

 }

enter image description here

选中“在推送时隐藏底栏”