Tabbed App et agencement des Views

heliohelio Membre
octobre 2017 modifié dans API UIKit #1

Bonsoir à  tous,


 


Je commence à  développer une application avec le template Tabbed App.


Elle aura un peu le même design que l'application de la Fnac, à  savoir une Tab Bar avec Home recherche et mon compte.


Je souhaiterais savoir comment mettre en place la View mon compte dans StoryBoard, car celle-ci sera différente suivant si l'utilisateur est connecté ou pas.


Alors comment doit-on procéder ?


merci. 


Réponses

  • Joanna CarterJoanna Carter Membre, Modérateur

    Tu pourrais avoir deux viewControllers, et tu peux remplacer l'un avec l'autre dans la liste des viewControllers du UITabBarController lorsque l'utilisateur connecte ou déconnecte.


  • heliohelio Membre
    octobre 2017 modifié #3

    Merci mais comment fonctionne le remplacement d'une ViewController par l'autre, y a t-il possibilité de faire cela sur le click d'un item de la Tab Bar :



    if isConnected {
    // ViewController avec les infos du compte
    } else {
    ViewController de connexion
    }

    ou alors c'est une autre technique ?


    Merci.


  • En fait je suis un peu dans le cas de l'image ci-dessous :


    pour moi first view : ConnexionViewController,


    second view : MyInfoTableViewController si déja connecté


     


    fnKQC.png


     


    dans la classe du NavigationController j'ai mis ceci :



    if isConnected {
    let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let vc : ConnexionViewController = storyboard.instantiateViewController(withIdentifier: "ConnexionViewController") as! ConnexionViewController


    let navigationController = UINavigationController(rootViewController: vc)

    self.present(navigationController, animated: false, completion: nil)
    } else {

    let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let vc : MyInfoTableViewController = storyboard.instantiateViewController(withIdentifier: "MyInfoTableViewController") as! MyInfoTableViewController


    let navigationController = UINavigationController(rootViewController: vc)

    self.present(navigationController, animated: false, completion: nil)

    }

    ça fonctionne mais j'ai plusieurs problèmes :


    - la TabBar n'apparait plus dans les ViewController


    - le message suivant dans la console : Presenting view controllers on detached view controllers is discouraged


  • Joanna CarterJoanna Carter Membre, Modérateur

    Il ne faut pas utiliser un UINavigationController pour faire un choix.


     


    Tu devrais utiliser un "Container" view comme ci :


     


  • Impeccable, je viens de tester ça fonctionne mieux comme ça ! merci !


  • Joanna CarterJoanna Carter Membre, Modérateur
    octobre 2017 modifié #7

    Et, si tu veux changer du contrôleur pour la connexion vers le contrôleur pour l'info, tu dois mettre un bouton sur la view de connexion et le connecter vers ce code dans le contrôleur :



    class ConnexionViewController : UIViewController
    {
    var didConnect: (() -> ())?

    @IBAction func btnConnected()
    {
    didConnect?()
    }
    }

    Puis, il faut modifier le code dans le deuxième contrôleur :



    class SecondViewController: UIViewController
    {
    var isConnected = false

    override func viewDidLoad()
    {
    super.viewDidLoad()

    guard let storyboard = self.storyboard else
    {
    return
    }

    let subViewController = isConnected ? storyboard.instantiateViewController(withIdentifier: "Info") : storyboard.instantiateViewController(withIdentifier: "Connexion")

    subViewController.willMove(toParentViewController: self)

    self.addChildViewController(subViewController)

    view.addSubview(subViewController.view)

    subViewController.didMove(toParentViewController: self)

    if let connexionViewController = subViewController as? ConnexionViewController
    {
    connexionViewController.didConnect =
    {
    connexionViewController.didConnect = nil

    connexionViewController.willMove(toParentViewController: nil)

    connexionViewController.view.removeFromSuperview()

    connexionViewController.removeFromParentViewController()

    let infoViewController = storyboard.instantiateViewController(withIdentifier: "Info")

    infoViewController.willMove(toParentViewController: self)

    self.addChildViewController(infoViewController)

    self.view.addSubview(infoViewController.view)

    infoViewController.didMove(toParentViewController: self)
    }

    self.isConnected = true
    }
    }
    }
  • Merci !


    et admettons que j'ai un bouton "me déconnecter" dans infoViewController, je procède un peu de la même façon pour ré-afficher ConnexionViewController ?


  • Joanna CarterJoanna Carter Membre, Modérateur
    Pourquoi pas ? :)
Connectez-vous ou Inscrivez-vous pour répondre.