如何获取超过 5 个项目的 UITabBarController 中选定的 UITabBarItem 的标签?
How to get the tag of selected UITabBarItem in UITabBarController for more than 5 items?
在情节提要中,我创建了 UITabBarController
与另一个视图控制器的 6 个关系。所以现在我有 6 UITabBarItems
。我将它们标记为 0 到 5。这就是为什么我检测到用户选择了 UITabBarItem
的原因。
注意:
我不能使用 selectedIndex
因为这种方式不会告诉我选择了哪个选项卡,因为用户可以更改 UITabBar
[=49 中项目的顺序=].
在 UITabBar
中有 属性 items
和 selectedItem
但如果超过 5 个项目,属性 items
保留最多 5 项。
例如,当用户在索引 4 或 5 处选择 UITabBarItem
时,他们选择的索引都是 4。现在带有索引 4 的 UITabBarItem
在标签栏上表示 "More Items".
所以,我确实需要访问选定的 UITabBarItem
以获取其 标签。有什么办法可以做到这一点吗?
这是我的情况。
你可以试试这样的
tabBarController.selectedViewController.view.tag
因为 UIViewController 没有标签,但是它的视图有。
此外,您可以使用 UIViewController 的 属性 restorationIdentifier
经过大量挖掘,解决方案相当简单:-)
在您的 UITabBarController
中符合 UINavigationControllerDelegate
协议的 delegate
:
//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
}
}
}
}
在情节提要中,我创建了 UITabBarController
与另一个视图控制器的 6 个关系。所以现在我有 6 UITabBarItems
。我将它们标记为 0 到 5。这就是为什么我检测到用户选择了 UITabBarItem
的原因。
注意:
我不能使用 selectedIndex
因为这种方式不会告诉我选择了哪个选项卡,因为用户可以更改 UITabBar
[=49 中项目的顺序=].
在 UITabBar
中有 属性 items
和 selectedItem
但如果超过 5 个项目,属性 items
保留最多 5 项。
例如,当用户在索引 4 或 5 处选择 UITabBarItem
时,他们选择的索引都是 4。现在带有索引 4 的 UITabBarItem
在标签栏上表示 "More Items".
所以,我确实需要访问选定的 UITabBarItem
以获取其 标签。有什么办法可以做到这一点吗?
这是我的情况。
你可以试试这样的
tabBarController.selectedViewController.view.tag
因为 UIViewController 没有标签,但是它的视图有。
此外,您可以使用 UIViewController 的 属性 restorationIdentifier
经过大量挖掘,解决方案相当简单:-)
在您的 UITabBarController
中符合 UINavigationControllerDelegate
协议的 delegate
:
//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
}
}
}
}