Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Desativar Tab Bar em uma view

Estou em um projeto, onde eu tenho um tab bar controller, que possuí dois itens, esses dois itens são o "navigation controller 1" que é ligado ao "view controler 1", e o "navigation controller 2, ligado ao "view controller 2".

Até aí tudo bem, os dois view controllers tem o tab bar e o top bar do navigation, mas tenho também o "view controller 3" que é mostrado ao clicar no botão new do view controller 2.

O problema é o seguinte, quando mostro o view controller 3 ele também contém o tab bar e o top bar do navigation, mas a partir dessa tela eu não quero mais ter o tab bar, quero ter a navegação apenas através do navigation, ou seja, como posso tirar o tab bar do view controller 3?

Fico grato se alguém puder me ajudar.

4 respostas

Olá Gilmar, tudo bem?

Entendi o seu problema...

Você já tentou utilizar o método present para chamar o ViewController3 ?

Ficaria assim:

chamando ViewController programaticamente

Depois que colocamos o identificador no ViewController 3, precisamos criar uma action do botão 'New' do ViewController 2 para chamá-lo programaticamente:

action do botão 'New' do ViewController 2:

@IBAction func buttonNew(_ sender: UIButton) {
        let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "viewController3")
        self.present(controller, animated: true, completion: nil)
    }

Chamando dessa forma, ele não 'herda' o tab bar controller nem o navigation bar

Veja se isso resolve, e me conta ;]

Abs

Já avia feito dessa forma, atualmente estou usando esse código, porém eu queria herdar o navigation, ou pelo menos fazer com que um "top bar" apareça no view controller 3, assim como aparece em uma tela usando o navigation.

Por mais que eu selecione o meu view controller e marque o top bar como translucent navigation bar, ele aparece apenas na pré view, mas não aparece ao ser executado.

Teria alguma outra forma de fazer o top bar aparecer?

solução!

Você pode fazer o seguinte então:

Na action do botão 'New' do ViewController 2, altera a chamada do ViewController 3 através do 'navigationController' novamente:

@IBAction func buttonNew(_ sender: UIButton) {
        let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "viewController3")
        self.navigationController?.pushViewController(controller, animated: true)
    }

No ViewController 3, você pode dar um hidden no TabBarController através desse código:

override func viewDidLoad() {
        super.viewDidLoad()
        self.tabBarController?.tabBar.isHidden = true
    }

Dessa forma você mantém o navigation bar e oculta o tab bar

Você só precisa tomar cuidado que quando você voltar da tela 3 para a 2 o tab bar estará oculto. Então você terá que implementar esse código nos ViewControllers que você quer que ele fique visível:

override func viewWillAppear(_ animated: Bool) {
        self.tabBarController?.tabBar.isHidden = false
    }

Testa aí e me conta se é isso que você precisava...

Abs

Precisava exatamente disso.

Obrigado Andriu!