在tabBarController上隐藏图像

时间:2019-01-12 01:57:39

标签: swift image tabbar

我有一个如下所示的标签栏: tabBarimage

中间按钮只是一个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()完全从超级视图中删除图像,但即使这样也不起作用。

我很乐意提供任何想法和帮助。

预先感谢:)

2 个答案:

答案 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,这就是为什么它不能按您期望的方式工作的原因。

删除该代码,然后在TabBarControllerViewControllerstabBarController的基础viewWillDisAppear中添加两个方法:

viewWillAppear

因此,每次您转到另一个viewController(大概为viewController的详细信息时,都从tabBarController的基本控制器中隐藏),当baseViewController的一个视图消失时将其隐藏,然后在该视图消失时再次使其可见再次出现。