如何从标签栏视图控制器切换到另一个作为导航控制器子视图的视图

Posted

技术标签:

【中文标题】如何从标签栏视图控制器切换到另一个作为导航控制器子视图的视图【英文标题】:How to segue from tab bar view controller to another view which is a child of a navigation controller 【发布时间】:2020-04-04 13:35:05 【问题描述】:

我布置了我的主屏幕(摘要屏幕),如下面的屏幕截图所示:

我在 UITabBarController 子类上添加了“+”按钮。此按钮将连接到视图控制器并以模态方式显示。为了让您了解我是如何构建故事板的,请参考下面的屏幕截图:

这个模态视图控制器有一个用户需要填写的表单,一旦完成,就会有一个“完成”按钮,它将 1) 关闭模态视图,2) 将它们带回根视图,即“摘要”选项卡或“详细信息”选项卡,然后 3) 将他们带到一个列表视图,显示他们在列表中输入的最新数据(目标视图 - 以红色突出显示)。

现在,当用户点击“+”按钮时执行 segue 非常简单。使用以下代码:"

menuButton.addTarget(self, action: #selector(menuButtonAction(sender:)), for: .touchUpInside)

然后

func addNewExpense(action: UIAlertAction)
    self.performSegue(withIdentifier: "segue_formModal", sender: self)

在模式上,我设置了一个协议,然后将表单数据发送回选项卡视图控制器。

extension XtabBarViewController: NewInfoDelegate
func newInfoSubmitted(formData: FormData) 
    performSegue(withIdentifier: "segue_ListingPage", sender: self)

但似乎 perform segue 不起作用。它说segue不存在。 “segue_ListingPage”是连接摘要视图和目标视图的转场。

如何从标签栏视图控制器转到目标视图?任何帮助表示赞赏。

提前致谢!

【问题讨论】:

【参考方案1】:

您可以将导航视图控制器设为入口点。

【讨论】:

【参考方案2】:

我自己想出来的。为了那些遇到同样问题的人的利益,这是我的解决方案。

我只是从标签栏视图控制器中添加了代码:

    let childVC = children[0].children[0]
    childVC.performSegue(withIdentifier: "segue_TXListPage", sender: self)

所以我在这里所做的就是从视图控制器调用 performSegue 来连接到目标控制器。

【讨论】:

以上是关于如何从标签栏视图控制器切换到另一个作为导航控制器子视图的视图的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从标签栏控制器导航到另一个标签栏控制器?

在 UITabBarController 中,如何从一个视图控制器切换到另一个视图控制器并保留标签栏?

切换到另一个视图控制器时,如何保持标签栏可见? [关闭]

如何在 iPhone 中从一个 Tabbarview 控制器切换到另一个 TabbarViewController?

在标签栏中的同一标签上切换视图而不使用导航控制器

将数据从标签栏开关直接传递到另一个视图控制器