Perte de la TabBar

Bonjour à tous,
voici la situation je suis dans un des onglets d’un TabBarViewController et je souhaite recharger ce même onglet en cliquant sur une des lignes de la TableView qui s’y trouve. J’utilise cette méthode à la fin d’une closure de type Alamofire.request :

let getStoryboard = UIStoryboard(name: "Main", bundle: nil)
let getViewController = getStoryboard.instantiateViewController(withIdentifier: "tabbar-view").childViewControllers[1]
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = getViewController

Ca marche à part que je perd la TabBar … je supppose qu’il me manque une info à transmettre ou peut être que je n’utilise pas ma bonne méthode.

A bon entendeur ! un peu d’aide serait bien venu !

Mais tu la caches quelque part dans ton code ?
Sinon, essaye de forcer l’apparition de la tabBar avec : tabBarController?.tabBar.isHidden = false

Non je ne la cache pas… en faite j’accède directement au ViewController en plein écran et pas au TabBarViewController à l’index souhaité…

Pas de changement avec cette ligne…

Salut,

il et tou a fait normal que la tabbar n’aparaisse pas vu que tu affiche ton viewcontroller au sommet de la hierarchi des vue. en gros tu a di a ton app que la vue principal et ton controller, du coup elle cache la tabbarcontroller. La tabbarController en général et le seul rootviewcontroller.

On a donc cette arborescence:
TabbarController → optionnel(navigation controller) → Viewcontroller

Pour acceder a un viewController qui se trouve dans un onglet spécicfique tu doit faire ceci:

let myController = self.tabBarController?.viewControllers[index] as! myViewController
myController.tableView.reloadData() // si tu veu recharger ta table ou faire
myController.refreshMyView() // refreshMyview etant une fonction qui remet a jour toute tes propirété de ton controller
// Ou alors mais je ne sais pa si c’est conseiller
myController.viewDidLoad() // Rééxecute viewdidLoad

Dans le cas ou ta vue est dans un navigation controller

let nav = self.tabbarController?.viewControllers[index] as! UInavigationCOntroller
let myController = nav.topViewController as! myViewController
// Meme blabal qu’en haut

J’ai fini par utiliser la fonction suivante dans le viewController qui s’affiche par défault :

override func viewWillAppear(_ animated: Bool) {
        if let changingValue = MyClass.shared {
            switch changingValue.myVar { // myVar est une variable que je change en fonction de tel ou tel fenetre de mon TabViewController
            case 0 : _ = self.tabBarController?.selectedIndex = 0
            case 1 : _ = self.tabBarController?.selectedIndex = 1
            case 2 : _ = self.tabBarController?.selectedIndex = 2
            case 3 : _ = self.tabBarController?.selectedIndex = 3
            case 4 : _ = self.tabBarController?.selectedIndex = 4
            default : _ = self.tabBarController?.selectedIndex = 0
            }
        } 
    }

et à la fin de ma closure Alamofire.request je change la valeur de myVar :

if let changingValue = MyClass.shared {
                            changingValue.myVar = 1
                        }
let getStoryboard = UIStoryboard(name: "Main", bundle: nil)
let getViewController = getStoryboard.instantiateViewController(withIdentifier: "tabbar-view")
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = getViewController

C’est pas très propre mais ça marche… si quelqu’un à un truc plus propre du genre :
afficher le ViewController[index] d’un TabBarVieController autre que celui par default.

Merci à @schtipoun et @Samir pour votre réactivité, vos réponse mon donné l’idée de la pseudo-solution

Quand tu dis recharger, tu veux vraiment recréer le view controller entièrement ? Tu ne peux pas juste recharger les données dont tu as besoin ?

Non je n’ai pas besoin de recréer le view controller.
J’ai cherché à faire un preparSegue() pour charger les OUTLETS mais je ne vois pas de segue de type tabBar.
Ce type de segue sont nommée Relationship « view Controller » mais ne sont pas paramètrable

Sans titre