Скрытие изображения на вкладке BarController - PullRequest
0 голосов
/ 12 января 2019

У меня есть такая панель вкладок: 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: _) в коде.

Средняя кнопка работает нормально, когда я нажимаю ее, тач просто проходит по изображению и до вкладки BarItem.

То, что я хотел бы сделать, - это когда происходит переход к контроллеру среднего вида, чтобы скрыть изображение.

Я пытался использовать функцию viewDidAppear() в отображаемом viewController. Я использовал этот код:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    let tabBarD = TabBarDelegate()
    tabBarD.button.isHidden = true
}

но это не работает. Я также попытался полностью удалить изображение из суперпредставления, используя tabBarD.button.removeFromSuperview(), но даже это не работает.

Я бы любил любые идеи и помогал.

Заранее спасибо:)

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Я понял это!

Спасибо emrepun, который заставил меня задуматься о том, как ее решить!

Я закончил тем, что использовал расширение метода делегата, вот так:

extension TabBarDelegate: UITabBarControllerDelegate {
    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
        if viewController.hidesBottomBarWhenPushed {
            self.button.isHidden = true
        }
        return true
    }
}

И так как я использовал метод hidesBottomBarWhenPushed из раскадровки, это сработало!

Спасибо за ваше время

0 голосов
/ 12 января 2019

В вашем viewDidAppear методе middleViewController вы фактически инициализируете новый TabBarController, поэтому он не работает так, как вы собираетесь.

Удалите этот код и добавьте два метода к вашей базе ViewControllers в tabBarController, viewWillDisAppear и viewWillAppear:

func viewWillDisappear(_ animated: Bool) {
    super.viewWilDisappear(animated)
    if let tabBarController = self.tabBarController as? TabBarDelegate {
        tabBarController.button.isHidden = true
    }

}

func viewWillAppear(_ animated: Bool) {
    super.viewWilAppear(animated)
    if let tabBarController = self.tabBarController as? TabBarDelegate {
        tabBarController.button.isHidden = false
    }
}

Таким образом, каждый раз, когда вы переходите к другому viewController (предположительно подробно viewController, из базовых контроллеров tabBarController, вы скрываете его, когда один из представлений baseViewController исчезает, затем вы делаете его видимым снова, если представление собирается появиться снова.

...