【问题标题】:Present a Tab Bar View Modally when View Controller is embedded in a Navigation Controller?当视图控制器嵌入导航控制器时,以模态方式显示选项卡栏视图?
【发布时间】:2021-07-09 12:05:38
【问题描述】:

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

红色:标签栏控制器继续...
橙色:已嵌入的导航控制器...
绿色:视图控制器

我想让我的中间选项卡视图(绿色)以模态方式呈现,有点像 reddit 应用程序如何使用中间的“发布到 Reddit”按钮。当这个中间视图被关闭时,之前打开的原始选项卡将被返回。如何做到这一点?

【问题讨论】:

  • 创建一个从标签栏控制器到绿色视图控制器的显示序列。当你想在道德上展示绿色视图控制器时,触发那个 segue。
  • @Paulw11 连接标签栏控制器和视图控制器后如何触发segue?
  • @Matthew - 您的布局将您的“绿色视图控制器”显示为导航控制器的根 VC……您真正想要做什么?您的绿色 VC 是否推送到另一个 VC(可能更多),这就是为什么您将它放在导航控制器中的原因?你说“当这个中间视图被解除原始选项卡时......”所以,你真的不希望中间视图成为选项卡之一......你希望它显示为模态“弹出”?
  • @DonMag 是的,我希望中间视图成为模态“弹出”类型视图,但我希望能够从标签栏访问它。中间视图嵌入在导航控制器中,因为我要让它有多个“下一个”屏幕。总而言之,中间标签栏项目在弹出式窗口中打开绿色视图,并带有(最终)多个 Next 屏幕。

标签: ios swift uinavigationcontroller uitabbarcontroller


【解决方案1】:

一种方法...

为您的第二个选项卡 UINavigationController 提供一个 StoryboardID - 例如“createItemsNavController” - 然后在您的自定义选项卡栏控制器类中实现 shouldSelect

如果选择了第二个选项卡(选项卡与所有数组一样,都是从零开始的),实例化您的“createItemsNavController”并呈现它,返回falseshouldSelect

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)喜欢符合通用界面操作的应用。由于用户熟悉选项卡栏,选择选项卡按钮会切换到该选项卡,因此可能不赞成以这种方式更改功能。

当然,它是您的应用,以及您的设计选择...

【讨论】:

  • 非常感谢您的回复。当我再次使用计算机时,我会尝试一下。尽管我很好奇您关于常见界面操作的最后一点是什么意思。我的印象是从标签栏交互出现的模态视图出现在许多应用程序中?例如,iOS Safari 上打开“历史”视图的标签栏项目就是这样做的。
  • iOS Safari 底部的栏是“工具栏”而不是“标签栏”。这些按钮中的每一个都有特定的功能,而不是导航到应用程序的不同部分 - 这是典型的 TabBar 正在做的事情。
  • Ohhhhhh 这解释了很多。我不确定你是否熟悉 Instagram 应用,但他们最近将“创建帖子”按钮从底部标签栏的中间移到了主屏幕导航栏的右上角。这是相同的 Apple 界面指南的示例吗?
  • Instagram...不知道,但很有可能。他们也可能添加了他们希望通过选项卡访问的第 5 个“部分”。请注意,这些选项卡中的每一个都将您带到其应用程序的明显不同部分。作为个人说明,我讨厌必须了解应用程序的工作原理。例如,如果我点击列表中的一行,并且一个新视图从右侧滑入,我希望在左侧的顶栏上有一个“返回”按钮。我不想四处寻找“我的应用程序的 UI 是独一无二的”按钮。
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
相关资源
最近更新 更多