当视图控制器嵌入到导航控制器中时,以模态方式呈现选项卡栏视图?

Present a Tab Bar View Modally when View Controller is embedded in a Navigation Controller?

我的故事板是这样安排的。

红色:连接到...的选项卡栏控制器
橙色:嵌入的导航控制器...
绿色:视图控制器

我想让我的中间选项卡视图(绿色)以模态方式呈现,有点像 reddit 应用程序使用中间 'Post to Reddit' 按钮的方式。当此 Middle View 被取消时,将返回到之前打开的原始选项卡。如何做到这一点?

一种方法...

为您的第二个标签 UINavigationController 提供 StoryboardID - 例如“createItemsNavController” - 然后在您的自定义标签栏控制器 class.

中实现 shouldSelect

如果选择了第二个选项卡(选项卡,像所有数组一样,是基于零的),实例化您的“createItemsNavController”并呈现它,为[返回false =12=]:

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

    guard let indexOfTab = viewControllers?.firstIndex(of: viewController) else {
        return true
    }
    
    if indexOfTab == 1 {
        if let vc = storyboard?.instantiateViewController(withIdentifier: "createItemsNavController") as? UINavigationController {
            present(vc, animated: true, completion: nil)
        }
        return false
    }
    
    return true

}

如果你要走那条路,你也可以(这可能是个好主意)用空白视图控制器替换故事板中的 Tab 连接...因为你可能想避免加载它通过选项卡栏控制器,即使您从未允许该选项卡被激活。

附带说明:可能 是一个非常令人困惑的用户体验。用户(和 Apple)喜欢符合通用界面操作的应用程序。由于用户熟悉选项卡栏,选择选项卡按钮会切换到该选项卡,因此以这种方式更改功能可能不受欢迎。

当然是你的应用程序,你的 设计选择...