当标签栏点击两次时禁用自动弹出到根视图控制器

Posted

技术标签:

【中文标题】当标签栏点击两次时禁用自动弹出到根视图控制器【英文标题】:Disable automatic pop to root viewcontroller when tabbar tapped twice 【发布时间】:2018-12-20 14:31:44 【问题描述】:

目前,我使用视图控制器推送另一个视图控制器,但我不允许用户返回到以前的视图控制器。我已经隐藏了栏后退按钮,但在 swift 4 中,当标签栏点击两次时,用户能够自动自动到导航栏中的 rootviewcontroller。关于 swift 4.2 解决此问题的任何建议?

【问题讨论】:

隐藏标签栏?还是禁用它? 你需要一个 NavigationController 吗?为什么不将其作为模态呈现? 我需要一个导航控制器和标签栏控制器。 当标签栏点击两次时禁用,因为现在,当标签栏点击两次时会弹出根视图。 【参考方案1】:

您可以继承UITabBarController,将标签栏控制器设为自己的委托,并实现以下委托功能:

class TabBarController: UITabBarController, UITabBarControllerDelegate 

    required init?(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)
        delegate = self
    

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) 
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        delegate = self
    

    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool 
        return viewController != selectedViewController
    


这样用户只能选择尚未选择的标签栏项目。

【讨论】:

【参考方案2】:

您可以使用此扩展程序禁用双击。

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

    return viewController != tabBarController.selectedViewController

【讨论】:

【参考方案3】:

您可以使用setViewControllers([newViewController], animated: true) 而不是push,这样堆栈中就没有视图控制器可以返回。

【讨论】:

它运行良好,但它会产生另一个问题,即标签栏图像消失。

以上是关于当标签栏点击两次时禁用自动弹出到根视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

弹出到根视图控制器时导航栏消失

弹出到根视图控制器,没有表视图的动画崩溃

标签栏第二次点击弹出到导航控制器 - 如何停止它

选项卡栏,当来自另一个选项卡的视图控制器时弹出到根视图控制器(默认 vc)

当用户直接点击标签栏项目时,如何禁用滑动动画?

如何停止加载标签栏项目选择的视图?