Скрытие изображения на tabBarController

У меня есть такая панель вкладок: Скрытие изображения на tabBarController

Средняя кнопка - это просто 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.

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

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

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

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

Буду рад любым идеям и помощи.

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
69
2

Ответы 2

В вашем методе 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 собирается исчезнуть, затем вы снова делаете его видимым, если представление снова появится .

Извините, это не сработало. Панель вкладок не имеет методов viewWillApear и excluar, которые вызываются, когда они отображаются в middleViewController.

thecoolwinter 12.01.2019 03:19

Попробуйте в своем middleViewController, обновите свой метод viewWillAppear в своем контроллере, где бы вы ни писали это как мою реализацию. Затем также добавьте viewWillDisAppear и скройте его, как я и для вашего middleViewController.

emrepun 12.01.2019 03:21

Я понял!

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

В итоге я использовал расширение метода делегата, например:

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

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

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

Такой подход выглядит неплохо, рад, что смог помочь :)

emrepun 12.01.2019 03:23

Другие вопросы по теме