双击标签栏项目后如何弹出到root?

时间:2015-12-23 20:51:57

标签: ios uinavigationcontroller uitabbarcontroller uisplitviewcontroller uitabbar

通常情况下,当UINavigationController放置在UITabBarController中时,导航控制器弹出到root,并且其所在的相应选项卡是双击的。如何在标签栏控制器和导航控制器之间使用UISplitViewController实现相同的效果?理想情况下,它将通过视图控制器的子视图控制器进行递归,并在它找到的所有导航控制器上调用popToRootViewController。我是否必须将自己的手势识别器添加到标签栏,因为它看起来不像是否有用于了解用户双击标签的钩子?

2 个答案:

答案 0 :(得分:2)

而不是设置In [80]: if 'foo- ' in fail or re.search('.*Ignore.*keyword', fail): print 'fail' ....: fail In [81]: if 'foo- ' in success or re.search('.*Ignore.*keyword', success): print 'fail' ....: fail 我只是在UIGestureRecognizer中跟踪所选索引,如果旧选择的索引相同,则在shouldSelectViewController中弹出到我的主导航控制器上的root作为新的。

答案 1 :(得分:1)

在Swift 4中,它可以是这样的:

class TabBarViewController: UITabBarController, UITabBarControllerDelegate {

    private var shouldSelectIndex = -1

    override func viewDidLoad() {
        super.viewDidLoad()
        delegate = self
    }

    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
        shouldSelectIndex = tabBarController.selectedIndex
        return true
    }

    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
        if shouldSelectIndex == tabBarController.selectedIndex {
            if let splitViewController = viewController as? UISplitViewController {
                if let navController = splitViewController.viewControllers[0] as? UINavigationController {
                    navController.popToRootViewController(animated: true)
                }
            }
        }
    }
}