【问题标题】:Determine which tab select in tabbarcontroller确定在 tabbarcontroller 中选择哪个选项卡
【发布时间】:2014-01-24 07:36:39
【问题描述】:

我在我的应用委托中实现了以下内容并尝试检查所选索引。我发现这个值是单击新选项卡时它所在的选项卡,而不是新选项卡。有没有办法找到选择了哪个选项卡?

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
    int *i = tabBarController.selectedIndex;
}

【问题讨论】:

    标签: ios ios7 uitabbarcontroller appdelegate


    【解决方案1】:

    Swift 版本:

    func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
        var shouldSelect = true
        if let viewControllers = tabBarController.viewControllers where viewControllers.indexOf(viewController) == lastIndex {
            shouldSelect = false
        }
        return shouldSelect
    }
    

    【讨论】:

      【解决方案2】:

      如果我没记错的话,你可以用

      - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
          NSUInteger selectedIndex = [tabBarController.viewControllers indexOfObject:viewController];
          // ...
          return YES or NO;
      }
      

      【讨论】:

      • 问题是代码在错误的委托方法中,在选项卡实际更改之前调用。
      • @rmaddy:你可能是对的,但是如果你想决定是否应该选择新标签,通常会实现shouldSelectViewController。在didSelectViewController 中,为时已晚。
      • 看来 OP 想要新索引。您检查新选择的 VC 索引的代码将给出该答案。但是如果用户只是想在事后知道新的索引,那么我的回答似乎更直接。如果需要验证选择,那么您的答案当然更好。
      【解决方案3】:

      您想使用tabBarController:didSelectViewController: 委托方法。选择选项卡后调用。

      您的int *i 实际上应该是int i 或者更好的是NSUInteger i

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-05
        • 1970-01-01
        • 2010-10-19
        • 2017-09-04
        • 1970-01-01
        • 2013-02-13
        • 2021-04-15
        相关资源
        最近更新 更多