ios - 如何获取超过 5 个项目的 UITabBarController 中选定的 UITabBarItem 的标签?

标签 ios uitabbarcontroller uitabbaritem

在 Storyboard 中,我创建了 UITabBarController,它与另一个 View Controller 有 6 个关系。所以现在我有 6 个 UITabBarItems。我将它们标记为从 05。这就是为什么我检测到用户选择了 UITabBarItem 的原因。

注意:

我不能使用 selectedIndex 因为这种方式不会告诉我选择了哪个选项卡,因为用户可以更改 UITabBar 中项目的顺序/strong>.

UITabBar 中有属性 itemsselectedItem 但如果超过 5 个项目,属性 items 最多保留 5 项。

例如,当用户在索引45 处选择UITabBarItem 时,两者选择的索引都是4。现在,索引为 4UITabBarItem 指示标签栏上的 “更多项目”

所以,我确实需要访问选定的 UITabBarItem 以获取其标签。有什么办法可以做到这一点吗?

这是我的情况。

enter image description here

最佳答案

经过大量挖掘,解决方案相当简单:-)

在符合 UINavigationControllerDelegate 协议(protocol)的 UITabBarControllerdelegate 中:

//MARK: - UITabBarControllerDelegate

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

    if viewController == tabBarController.moreNavigationController {
        tabBarController.moreNavigationController.delegate = self
    } else {
        findSelectedTagForTabBarController(tabBarController)
    }
}

//MARK: - UINavigationControllerDelegate

func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
    findSelectedTagForTabBarController(navigationController.tabBarController)
}

//MARK: - Private

private func findSelectedTagForTabBarController(tabBarController: UITabBarController?) {

    if let tabBarController = tabBarController {
        if let viewControllers = tabBarController.viewControllers {
            let selectedIndex = tabBarController.selectedIndex
            let selectedController: UIViewController? = viewControllers.count > selectedIndex ? viewControllers[selectedIndex] : nil
            if let tag = selectedController?.tabBarItem.tag {
                //here you can use your tag
            }
        }
    }
}

关于ios - 如何获取超过 5 个项目的 UITabBarController 中选定的 UITabBarItem 的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31521951/

相关文章:

ios - 应用被拒绝,原因 2.9

ios - UITabBarItem 标签中的多行

objective-c - iphone 应用程序 - 检测按下了哪个标签栏项目

ios - 如何更改 Storyboard上的标签栏背景颜色和标签栏项目颜色

ios - UIDynamicAnimator - 我可以使用主 UIWindow 作为引用 View 吗?

IOS iPad应用程序底部奇怪的白色区域

ios - 将 PHAsset 获取结果限制为仅 3 个 Assets

ios - #UIBarButtonItem 上的选择器

android - 是否可以将 iOS Multipeer Connectivity 与 android 连接?

ios - 为什么 "Tab Bar Controller"不显示图标?