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