检测标签栏项目选择

时间:2016-11-24 06:44:19

标签: ios swift navigation uitabbarcontroller tabbar

为简单起见,我将把我的viewControllers改为VC1,VC2 ......

我的TabBarController作为我的根viewController。它包含3个选项卡,每个选项卡包含UITableViewController。所以我在TabBarController的索引0处有VC1,索引1处的VC2和VC3以及索引2.现在我想检测用户点击TabBarController的索引0以转到VC1。我使用UITabBarDelegate尝试了如下。

func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {

    if self.tabBarController?.selectedIndex == 0 {
        // do something
    }
}

当我从VC1转到VC2并从VC2返回VC1时,它确实有效。但是如果我从VC1转到VC3然后再回到VC1,它就不起作用。有人可以解释原因吗?

我真正希望实现的是用户从VC2或VC1转到VC3。现在用户点击了一个带有VC4的tableViewCell。现在每当用户回到VC1我都想调用webService。

3 个答案:

答案 0 :(得分:1)

而不是测试tabcontroller selectedIndex,自己计算所选索引:

func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {

    let selectedIndex = tabBarController.viewControllers.index(of: viewcontroller)!
    if selectedIndex == 0 {
        // do something
    }

}

答案 1 :(得分:0)

您需要将此delegate方法用于UITabBarController

func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {

}

只要您在TabBar

上选择任何项目,就会调用此方法

答案 2 :(得分:-1)

如果我理解正确你可以尝试以下;首先尝试检查视图控制器,如下所示

if ([instance1 isKindOfClass:[CustomUIViewController class]]) {
    // then call web service.
}

希望这能解决问题。