【问题标题】:iOS on tab bar changeiOS 在标签栏上的变化
【发布时间】:2017-05-27 10:07:47
【问题描述】:

我想知道标签栏中的标签何时更改,以便我可以将其报告给 Firebase Analytics。我该怎么做呢。

我试过了

override func viewDidAppear(_ animated: Bool) {
    Analytics.logEvent("projects_open", parameters: [:])
}

但我有一种感觉,当我从另一个 ViewController 回到它时,它也会运行。我需要一些可以检测标签何时打开而不是何时可见的东西。

还有其他适用于此的函数吗?

【问题讨论】:

    标签: ios swift xcode firebase viewcontroller


    【解决方案1】:

    斯威夫特 3.0

    使用这两个委托方法,不要忘记将委托分配给自己。

    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
        //MARK: - UITabBarControllerDelegate
    }
    
    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
       //MARk: - UITabBarDelegate
    }
    

    【讨论】:

      【解决方案2】:

      UITabbarController 上有一个委托函数用于检测选项卡是否被选中:

      func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController)
      

      您也可以像这样访问选定的索引:

      tabController.selectedIndex
      

      【讨论】:

      • 我需要在每个选项卡上添加一个还是可以将它放在 AppDelegate 中?
      • 您的标签栏控制器是在应用委托中创建的吗?如果是,那么您首先需要分配委托属性(tabbarController.delegate = self),然后在 appdelegate 中实现此功能。每次用户切换标签时都会调用它。这是委托协议的文档:developer.apple.com/reference/uikit/uitabbarcontrollerdelegate
      • 我在我的故事板中制作了它,所以我想我在每个标签中只有一个
      • 好的,您也可以在情节提要中分配委托,或者通过创建一个出口然后在代码中分配它。如果它是您的 rootviewcontroller,您可以像这样在应用程序委托中访问它: let tab = window?.rootViewController as! UITabBarController
      【解决方案3】:

      如果你只使用 tabBar.in viewDidLoad 将 tabBar 委托设置为 self 和

      override func tabBar(_ tabBar: UITabBar, didSelect item:UITabBarItem) 
      {
             //MARk: - UITabBarDelegate
      if(tabBar.selectedIndex == 0) {
       //Do something
      }
      else if(tabBar.selectedIndex == 1) {
       //Do something.
      } 
      }
      

      如果你使用 tabBarController 使用这个方法。并将委托标记为 self

      func tabBarController(_ tabBarController: UITabBarController, 
      didSelect viewController: UIViewController) {
      }
      

      非常重要的注意事项:

      如果您想保存之前选择的 tabBar,您必须在途中保存它。根据您的意愿使用标志或 NSUserDefaults。我之所以提到这一点,是因为我需要在我的一个项目的视图中检查现在选择了哪个选项卡。

      【讨论】:

        【解决方案4】:

        斯威夫特 5

        简单的方法只需点击链接 StakOverFlow 屏幕就会打开 https://stackoverflow.com/a/60539396/6881070

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-04-08
          • 2020-05-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多