UITabBar是否可以仅更改活动标签图标?
假设我有5个标签,第1个处于活动状态。我现在想使第二个图标处于活动状态,而就TabBar而言,不更改任何其他内容,仅更改该图标即可。
每当我尝试突出显示第二个图标时,TabBar都会切换控制器,并且如果没有(代表替代),图标的也不会改变。有什么办法可以使选项卡保持活动状态,而只有图标不处于活动状态?
我为什么要问这个?
我有一个“更多”标签,我想在当前标签上方处于活动状态(因此,当前标签将在后台可见),但是在此期间应突出显示“更多”标签弹出窗口(如果我激活“更多”选项卡,则TabBar将切换控制器)。弹出窗口消失后,如果未选择任何新标签,我将从后台返回到上一个标签。
我设法使期望的行为没有激活“更多”。每当我触摸该图标时,TabBar就会切换控制器。
答案 0 :(得分:0)
作为解决方法,您可以通过实现tabBarController(_:shouldSelect:)
方法来实现。
这是您应该做的:
第一:在第一个视图控制器中,请确保实现:
tabBarController?.delegate = self
viewDidLoad
是合适的地方。
第二:在第一个视图控制器中实现tabBarController(_:shouldSelect:)
:
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if viewController is PopupViewController {
// present your pop-up here... for example:
let alert = UIAlertController(title: "Title", message: nil, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .destructive, handler: nil))
present(alert, animated: true)
return false
}
return true
}
在这一点上,点击PopupViewController
的项目不会执行任何操作(即使突出显示按钮),但是无论当前哪个视图控制器处于活动状态,它都会显示alert
。
答案 1 :(得分:0)
您可以继承UITabBarController
并重写selectedViewController
属性,如下所示:
class CustomTabBarController: UITabBarController {
override var selectedViewController: UIViewController? {
get {
return super.selectedViewController
}
set {
if newValue != viewControllers?.last {
super.selectedViewController = newValue
}
}
}
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
if let tabBarItemIndex = tabBar.items?.firstIndex(of: item) {
print("did select tab bar item at index \(tabBarItemIndex)")
}
}
}