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