我有一个如下所示的标签栏:
中间按钮只是一个UIImage,它添加到tabBarController的子类中,如下所示:
class TabBarDelegate: UITabBarController {
let button = UIImageView()
override func viewDidLoad() {
super.viewDidLoad()
delegate = self
self.tabBar.unselectedItemTintColor = #colorLiteral(red: 0.6666666865, green: 0.6666666865, blue: 0.6666666865, alpha: 1)
button.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
button.image = UIImage(named: "tabBarAdd")
button.setImageColor(color: #colorLiteral(red: 0.184496969, green: 0.6701939702, blue: 0.3898918033, alpha: 1))
let imageView = UIImageView()
imageView.image = UIImage(named: "tabBarAdd")
imageView.bounds = CGRect(x: button.frame.origin.x, y: button.frame.origin.y, width: button.frame.width, height: button.frame.height)
self.view.insertSubview(button, aboveSubview: self.tabBar)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
button.frame = CGRect.init(x: self.tabBar.center.x - 17.5, y: self.view.bounds.height - 80, width: 35, height: 35)
button.layer.cornerRadius = 17.5
}
}
我的图像当前不是正确的颜色,因此我正在使用扩展名来更改颜色,这是代码中的button.setImageColor(color: _)
函数。
当我按下中间按钮时,它工作正常,触摸只是遍历图像并到达tabBarItem。
我想做的是在过渡到中间视图控制器时隐藏图像。
我尝试在出现的viewController中使用viewDidAppear()
函数。我使用了这段代码:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let tabBarD = TabBarDelegate()
tabBarD.button.isHidden = true
}
但这不起作用。我还尝试使用tabBarD.button.removeFromSuperview()
完全从超级视图中删除图像,但即使这样也不起作用。
我很乐意提供任何想法和帮助。
预先感谢:)
答案 0 :(得分:1)
我知道了!
谢谢您的宽容,让我开始以不同的方式思考如何解决问题!
我最终使用了委托方法的扩展,如下所示:
extension TabBarDelegate: UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if viewController.hidesBottomBarWhenPushed {
self.button.isHidden = true
}
return true
}
}
由于我从情节提要中使用了hidesBottomBarWhenPushed
方法,所以有效了!
感谢您的时间
答案 1 :(得分:0)
在viewDidAppear
的{{1}}方法中,您实际上是在初始化一个新的middleViewController
,这就是为什么它不能按您期望的方式工作的原因。
删除该代码,然后在TabBarController
,ViewControllers
和tabBarController
的基础viewWillDisAppear
中添加两个方法:
viewWillAppear
因此,每次您转到另一个viewController(大概为viewController的详细信息时,都从tabBarController的基本控制器中隐藏),当baseViewController的一个视图消失时将其隐藏,然后在该视图消失时再次使其可见再次出现。