当标签栏点击两次时禁用自动弹出到根视图控制器
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
,这样堆栈中就没有视图控制器可以返回。
【讨论】:
它运行良好,但它会产生另一个问题,即标签栏图像消失。以上是关于当标签栏点击两次时禁用自动弹出到根视图控制器的主要内容,如果未能解决你的问题,请参考以下文章