如何判断 TabBarItem 是否已被选中
How to tell if TabBarItem is already Selected
所以我有一个 viewController
和一个 tableView
是从 tabBarController
呈现的。如果用户点击显示 已经 的视图的 tabBarItem
,我希望 tableView
滚动到顶部。我已将 UITabBarControllerDelegate
设置为 viewController
,然后添加以下方法:
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if tabBarController.selectedIndex == 0 {
//scroll to the top!
}
}
问题是 tableView
滚动到顶部 而不管 当前视图。所以我试图添加第二个条件,以确保当前显示的视图是正确的,但似乎没有什么是正确的。
TL;DR
如何判断用户正在点击已选择的 tabBarItem
?
您可以使用 self.view.window != nil
来确定 vc 的视图是否已经显示。使用 shouldSelect
委托方法,该方法在选择之前调用。
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if viewController === self && self.isViewLoaded {
// Please use viewController === self.navigationController
// if self is a child of a UINavigationController. We should
// compare the viewController with a direct child of the
// UITabController
if self.view.window != nil {
print("scroll to top")
} else {
print("Don't scroll to top")
}
}
return true
}
所以我有一个 viewController
和一个 tableView
是从 tabBarController
呈现的。如果用户点击显示 已经 的视图的 tabBarItem
,我希望 tableView
滚动到顶部。我已将 UITabBarControllerDelegate
设置为 viewController
,然后添加以下方法:
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if tabBarController.selectedIndex == 0 {
//scroll to the top!
}
}
问题是 tableView
滚动到顶部 而不管 当前视图。所以我试图添加第二个条件,以确保当前显示的视图是正确的,但似乎没有什么是正确的。
TL;DR
如何判断用户正在点击已选择的 tabBarItem
?
您可以使用 self.view.window != nil
来确定 vc 的视图是否已经显示。使用 shouldSelect
委托方法,该方法在选择之前调用。
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if viewController === self && self.isViewLoaded {
// Please use viewController === self.navigationController
// if self is a child of a UINavigationController. We should
// compare the viewController with a direct child of the
// UITabController
if self.view.window != nil {
print("scroll to top")
} else {
print("Don't scroll to top")
}
}
return true
}