轻按两次标签栏时,禁用自动弹出到根ViewController

时间:2018-12-20 14:31:45

标签: ios swift tabbar

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

4 个答案:

答案 0 :(得分:2)

基本上,以下函数可以很好地完成工作,在运行时只需调用一件事即可在标签栏控制器中设置 delegate = self

extension TabBarController: UITabBarControllerDelegate {
      func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
      return viewController != tabBarController.selectedViewController
}}

信用@Azat

答案 1 :(得分:0)

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

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

    return viewController != tabBarController.selectedViewController
}}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可以继承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
    }

}

这样,用户只能选择尚未选择的选项卡栏项目。