【问题标题】:Detecting tab bar item selection检测标签栏项目选择
【发布时间】:2017-04-08 08:33:49
【问题描述】:

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

我有一个TabBarController 作为我的根viewController。它包含 3 个选项卡,每个选项卡都包含一个 UITableViewController。所以我在TabBarController 的索引0 处有VC1,在索引1 和VC3 和索引2 处有VC2。现在我想检测用户何时点击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。

【问题讨论】:

  • 你如何设置它们?
  • 您可以简单地尝试override func viewDidAppear(_ animated: Bool) { if self.tabBarController?.selectedIndex == 0 { print("vc1") } } 将相同的代码应用到您的VC2VC3selectedIndex 1,2....?

标签: ios swift navigation uitabbarcontroller tabbar


【解决方案1】:

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

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

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

}

【讨论】:

    【解决方案2】:

    你需要对UITabBarController使用这个delegate方法

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

    当您选择 TabBar 上的任何项目时,都会调用此方法

    【讨论】:

      【解决方案3】:

      如果我理解正确,您可以在下面尝试;首先尝试检查如下视图控制器

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

      希望这能解决问题。

      【讨论】:

        猜你喜欢
        • 2012-10-05
        • 2019-03-09
        • 2011-11-21
        • 1970-01-01
        • 2016-02-23
        • 1970-01-01
        • 2012-11-06
        • 2013-03-20
        • 1970-01-01
        相关资源
        最近更新 更多