在segue之后保持标签栏在View上?

时间:2017-03-27 18:48:43

标签: ios swift interface-builder uitabbarcontroller

我有一个标签栏控制器,然后是导航控制器,然后是第一个视图控制器。此视图控制器具有预期的标签栏。但是,当我从这个视图中消失时,我失去了标签栏。我希望它能够保留其在另一个VC上的位置,这源于第一个观点。这是我的IB:

enter image description here

我希望标签栏在通过右侧VC的segue加载后也出现在左侧VC上,

如何实现这一目标,无论我如何设置VC底部的标签部分,它都会消失,如上所示。

2 个答案:

答案 0 :(得分:6)

如果您从一个标签栏视图的视图中执行模态segue,它将摆脱您正在呈现的模态视图的标签栏。

其次,当您进行segue时,您正在创建视图控制器的新实例。所以我猜你是从view1到view2并且丢失了标签栏,然后你又回到了view1。此时,您已创建了view1,view2和没有标签栏的view1的第二个副本。

我建议两件事之一。

1。)如果你想在从view1转到view2时将标签保持在底部,然后点击view1,在屏幕顶部选择Editor / Embed In / Navigation Controller。这会将您的view1嵌入导航控制器中。然后,如果您将segue从Modal更改为Push,它将使标签栏保持在底部。顶部的导航栏还可以轻松地从视图2返回到视图1以正确的方式(通过弹出视图)而不是创建新的segue。如果您不喜欢导航栏,则可以在检查器中将“顶栏”属性更改为“无”。然后,您需要在view2中创建一些其他方法以返回view1。 (通过弹出控制器,而不是通过分离)

2)如果您不想设置导航控制器,那么将标签栏内容保留在view2控制器的底部会有一点点困难。事实上,我不确定你是否可以使用模态segue完成它,你可能不得不写一些类型的自定义segue。无论哪种方式,如果你想转换回view1并转到正确的控制器(不是没有选项卡的新版本),那么你需要将一个动作附加到你用来segue的任何按钮并使用下面的代码(我也附上)导航控制器推送segue的代码,以防您创建导航控制器并摆脱导航栏。)

对于模态争论:

[self dismissModalViewControllerAnimated:YES];

对于Push segue:

[self.navigationController popViewControllerAnimated:YES];

您最好的选择是使用导航控制器方法,因为您可以保留标签。然后你可以使用导航栏返回(简单的方法,不需要代码),或者你可以摆脱它并使用一个按钮和上面的代码。

祝你好运! 如果有帮助,请单击绿色复选标记

答案 1 :(得分:0)

从情节提要中,您可以建立一个从启动视图控制器到“标签栏根视图控制器”的序列。然后使用segue将数据传递到特定的项目视图控制器

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let vc = segue.destination as! TabBarRootViewController
    let vc1  = vc.viewControllers?[0] as! specificItemViewController
    vc1.destinationVariable = self.startingControllerVariable