以模态方式将嵌入在导航控制器中的视图控制器与标签栏控制器分开

Posted

技术标签:

【中文标题】以模态方式将嵌入在导航控制器中的视图控制器与标签栏控制器分开【英文标题】:Present View Controller embedded in Navigation Controller apart of Tab bar controller modally 【发布时间】:2017-11-24 07:05:12 【问题描述】:

我在导航控制器中嵌入了一个视图控制器。这个导航控制器是我的标签栏控制器中的第三个项目。我想以模态方式呈现视图控制器。

这是我尝试过的,但它没有运行

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool 

    // CameraView is the Storyboard ID of the VC I want to present

    if viewController is EditPreviewVideosViewController 
        if let newVC = tabBarController.storyboard?.instantiateViewController(withIdentifier: "CameraView") 

            // None of this prints
            print()
            print("new vc is allowed")
            print()
            tabBarController.navigationController?.present(newVC, animated: true, completion: 
                print("complete")
            )
            return false
        
    
    return true

【问题讨论】:

您的相机 VC 和您的 tabBarController 是否在同一个故事板中? 标签栏控制器不在不同的故事板中 我问的是同一个故事板文件中的两个视图控制器?或者你有多个故事板 抱歉打错了,不,它们不在同一个故事板文件中。我有多个故事板 检查我的答案 【参考方案1】:

从 tabbarController childs 获取正确的导航控制器

if let nav = tabBarController.viewControllers[tabBarController.selectedIndex] as UINavigationController 

    nav.present(newVC, animated: true, completion: 
        print("complete")
    )

【讨论】:

我在哪里添加这个代码,你能用应用程序中的完整功能更新答案吗? 这段代码应该替换tabBarController.navigationController?.present( ... )这一行 好的,我试过了,我发现if viewController is EditPreviewVideosViewController 没有被运行。有什么建议吗?【参考方案2】:

您在错误的情节提要中找到视图控制器

这一行

let newVC = tabBarController.storyboard?.instantiateViewController(withIdentifier: ....

应该是

let newVC = UIStoryboard.init(name: "NameOfYourStoryboardContainsVideo", bundle: nil).instantiateViewController(withIdentifier: "CameraView")

现在你的 if 将正确执行

【讨论】:

那么我是要包含情节提要 ID 的名称,还是情节提要的实际名称 第一个参数将采用故事板的名称,如 Main,第二个参数将接受故事板 ID,即“CameraView”

以上是关于以模态方式将嵌入在导航控制器中的视图控制器与标签栏控制器分开的主要内容,如果未能解决你的问题,请参考以下文章

在导航堆栈中以模态方式呈现视图控制器

以编程方式将导航控制器嵌入模态视图控制器

嵌入到导航控制器中的动画根视图控制器以模态方式呈现

这个标签栏控制器应该嵌入在哪里?

Swift:以编程方式嵌入标签栏控制器后,导航栏消失

如何在保持导航栏存在的同时以模态方式呈现视图控制器。 (对于设置视图控制器)