如何判断 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
}