关闭模态呈现的视图控制器后切换标签栏控制器视图控制器

Posted

技术标签:

【中文标题】关闭模态呈现的视图控制器后切换标签栏控制器视图控制器【英文标题】:Switch tab bar controller view controller after dismissing a modally presented view controller 【发布时间】:2020-08-15 12:59:47 【问题描述】:

在我的项目中,您可以从模态视图创建帖子。

当模式视图被关闭(用户按下保存帖子)时,我想将标签栏控制器切换到第二个标签(帖子提要屏幕)。

这个话题与我的问题类似。唯一的区别是这是从模态视图中呈现的。我不知道如何在我的代码中实现它(标签栏为零) Switch tab bar programmatically in Swift

我添加了 3 张图片以使这个问题更清楚

code screenshot

console message

@objc func saveAction(sender: UIButton) 
    print ("> save pressed")
    print(presentingViewController?.tabBarController)
    print(presentingViewController)
    
    presentingViewController?.tabBarController?.selectedIndex = 1
    dismiss(animated: true)
 

编辑:抱歉堆栈溢出不允许我添加图像

【问题讨论】:

【参考方案1】:

您可以使用委托模式来做到这一点。但是如果您不想为此添加委托,您可以如下所示进行;

你可以通过改变tabBarControllerselectedIndex属性来切换标签栏

if let presenter = presentingViewController as? LibraryViewController 
        presenter.tabBarController?.selectedIndex = 1
    
dismiss(animated: true)

如果您在标签栏中的导航控制器上显示模式,请使用:

    if let tabBar = presentingViewController as? UITabBarController 
        tabBar.selectedIndex = 1
    
    dismiss(animated: true)

【讨论】:

你好吉廷!感谢您的快速答复。但我已经尝试过了。问题似乎是在模式视图中标签栏返回 nil。我已经用更好的细节和我的代码编辑了这篇文章。 您能展示一下您是如何呈现模态视图控制器的吗?您使用的是self.present 还是self.navigationController.present 在标签栏控制器的 Tab[0] 中,我有一个方法“self.navigationController?.present(view, animated: true, completion: nil)” 我试过了,但似乎没有调用 if 语句中的代码 自从您在导航控制器上进行演示后,我再次更新了答案。无需使用if let

以上是关于关闭模态呈现的视图控制器后切换标签栏控制器视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

无法在标签栏控制器的顶部完全呈现模态视图控制器

从 uitabbarController 视图中关闭模态视图

从标签栏控制器模态显示视图

从模态视图切换到标签栏视图控制器并且不会丢失标签栏

标签栏控制器在模态转场后消失

呈现一个模态视图控制器,但不要隐藏导航栏