点击 tabBar 项目应该总是打开第一个视图控制器
Tapping on a tabBar item should always open the first view controller
我有一个带有标签栏导航(5 个按钮)的应用程序。点击 5 个选项卡栏按钮中的一个时,是否可以始终打开导航的第一个控制器?例如,button1 打开 VC1(带导航控制器),VC1 可以打开 VC2,VC2 可以打开 VC3,等等。如果我在 VC3 上,则单击另一个选项卡栏按钮(假设是 button2),然后再次单击 button1,我想让它打开 VC1,而不是我离开的地方的 VC3。
我试过这个,但出于某种原因它没有像我预期的那样工作:
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
self.navigationController?.popToRootViewController(animated: true)
viewController.navigationController?.popToRootViewController(animated: true)
}
为了实现这个功能,我把代码写在tabBarDelegate
的didSelect
方法中。
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
let rootView = self.viewControllers![self.selectedIndex] as! UINavigationController
rootView.popToRootViewController(animated: false)
}
首先,此行为是 默认 当用户在选项卡按钮上点击 2 次时的行为(第一次点击用于登陆选项卡,第二次点击用于弹出根)。我建议不要编辑此行为,因为它与用户体验有关...
但是,如果您的目标是实现它(只需轻按 1 次即可跳转到根目录),请将 tabBarController(_:didSelect:)
实施为:
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
navigationController?.popToRootViewController(animated: true)
}
应该足够了,这意味着您的代码片段应该可以工作!尽管如此,问题似乎是该方法 not 甚至被调用,因此请确保视图控制器确实符合 UITabBarControllerDelegate
,并实施:
tabBarController?.delegate = self
加入viewDidLoad()
方法应该可以。
我有一个带有标签栏导航(5 个按钮)的应用程序。点击 5 个选项卡栏按钮中的一个时,是否可以始终打开导航的第一个控制器?例如,button1 打开 VC1(带导航控制器),VC1 可以打开 VC2,VC2 可以打开 VC3,等等。如果我在 VC3 上,则单击另一个选项卡栏按钮(假设是 button2),然后再次单击 button1,我想让它打开 VC1,而不是我离开的地方的 VC3。
我试过这个,但出于某种原因它没有像我预期的那样工作:
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
self.navigationController?.popToRootViewController(animated: true)
viewController.navigationController?.popToRootViewController(animated: true)
}
为了实现这个功能,我把代码写在tabBarDelegate
的didSelect
方法中。
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
let rootView = self.viewControllers![self.selectedIndex] as! UINavigationController
rootView.popToRootViewController(animated: false)
}
首先,此行为是 默认 当用户在选项卡按钮上点击 2 次时的行为(第一次点击用于登陆选项卡,第二次点击用于弹出根)。我建议不要编辑此行为,因为它与用户体验有关...
但是,如果您的目标是实现它(只需轻按 1 次即可跳转到根目录),请将 tabBarController(_:didSelect:)
实施为:
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
navigationController?.popToRootViewController(animated: true)
}
应该足够了,这意味着您的代码片段应该可以工作!尽管如此,问题似乎是该方法 not 甚至被调用,因此请确保视图控制器确实符合 UITabBarControllerDelegate
,并实施:
tabBarController?.delegate = self
加入viewDidLoad()
方法应该可以。