双击标签栏项目后如何弹出到root?
How to pop to root after double tapping a tab bar item?
通常,当 UINavigationController
被放置在 UITabBarController
中时,导航控制器会弹出到根目录,双击它所在的相应选项卡。如何在选项卡栏控制器和导航控制器之间使用 UISplitViewController
实现相同的效果?理想情况下,它将通过视图控制器的子视图控制器递归并在它找到的所有导航控制器上调用 popToRootViewController
。我是否必须将自己的手势识别器添加到选项卡栏,因为它看起来不像是用于了解用户何时双击选项卡的挂钩?
我没有设置 UIGestureRecognizer
,而是简单地跟踪 shouldSelectViewController
中的选定索引,如果旧的选定索引是,则在 didSelectViewController
中弹出我的主导航控制器的根和新的一样
在Swift4中,它可以是这样的:
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)
}
}
}
}
}
通常,当 UINavigationController
被放置在 UITabBarController
中时,导航控制器会弹出到根目录,双击它所在的相应选项卡。如何在选项卡栏控制器和导航控制器之间使用 UISplitViewController
实现相同的效果?理想情况下,它将通过视图控制器的子视图控制器递归并在它找到的所有导航控制器上调用 popToRootViewController
。我是否必须将自己的手势识别器添加到选项卡栏,因为它看起来不像是用于了解用户何时双击选项卡的挂钩?
我没有设置 UIGestureRecognizer
,而是简单地跟踪 shouldSelectViewController
中的选定索引,如果旧的选定索引是,则在 didSelectViewController
中弹出我的主导航控制器的根和新的一样
在Swift4中,它可以是这样的:
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)
}
}
}
}
}