2017-06-21 1 views
0

J'ai un TabBarController dans mon fichier Main.storyboard. Dans mon Upload.storyboard je présente un ViewController à partir du fichier Main.storyboard, mais il ne contient pas la barre d'onglets.Ajouter une barre d'onglets par programme à ViewController

Le bouton viewProfile devrait aller à un onglet Sharks et dans ce présent un contrôleur de vue à partir des données recueillies dans le Upload.storyboard (vue modal). Puis-je ajouter la barre d'onglets par programme ou est-ce que je ne présente pas correctement le VC correct?

// MARK: - Actions 
@IBAction func viewProfileButtonPressed(_ sender: UIButton) { 
    let stb = UIStoryboard(name: "Main", bundle: nil) 
    let sharkProfile = stb.instantiateViewController(withIdentifier: "sharkProfile") as! SharkProfileTableViewController 
    self.present(sharkProfile, animated: true) { 
     // add tab bar here? 
    } 
} 

TabBarController.swift

UploadConfirmationViewController.swift

+0

Que voulez-vous qu'il se passe ici? Commencez * avec une barre d'onglets, en tapant "viewProfile", et vous voulez afficher "SharkProfile" * à la place de * l'affichage actuel pour cet onglet? Voulez-vous que "SharkProfile" s'insère à droite comme un contrôleur de navigation typique? Ou voulez-vous que "SharkProfile" ait sa propre barre d'onglets séparée? – DonMag

+0

L'application commence par une barre d'onglets - mais ensuite je présente une vue modale sans barre d'onglets. Dans cette vue modale, cliquer sur viewProfile doit présenter le SharkProfile tel qu'il est dans Main.storyboard (avec une barre d'onglets). – pmanning

Répondre

0

Ce que vous devez faire est présent, le contrôleur de vue de la barre d'onglets, pas le contrôleur de vue qui est noyé dans la masse

0

Une méthode consiste à créer un délégué Protocole permettant d'appuyer sur le bouton View Profile pour «rappeler» le contrôleur View qui l'a présenté. Lorsque ce rappel est reçu, le VC définit l'onglet "en cours".

Il ressemblera à quelque chose comme ceci:

// define "call back" delegate protocol 
protocol EncounterUploadedDelegate : class { 
    func didTapSharkProfileButton() 
} 

Le contrôleur de vue Encounter devra se conformer à ce protocole:

class EncounterViewController: UIViewController, EncounterUploadedDelegate { 

    // the normal stuff for this VC and all the other code for it 
    // ... 

    // conform to the protocol 
    func didTapSharkProfileButton() -> Void { 
     // when we get this call-back, switch to the Shark Profile tab 
     // tabs are zero-based, so assuming "SharkProfile" is 
     // is the 4th tab... 
     self.tabBarController?.selectedIndex = 3 
    } 

    // assuming a "Show Modal" segue named "ShowEncounterUploadSegue" is used 
    // to present the Modal View 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "ShowEncounterUploadSegue" { 
      let vc = segue.destination as! TabModalVC 
      vc.encounterDelegate = self 
     } 
    } 

} 

Le contrôleur de vue d'être présenté comme modal:

class TabModalVC: UIViewController { 
    weak var encounterDelegate: EncounterUploadedDelegate? 

    @IBAction func profileButtonTapped(_ sender: Any) { 
     // dismiss self (the modal view) 
     self.dismiss(animated: true, completion: nil) 
     // this will call back to the delegate, if one has been assigned 
     encounterDelegate?.didTapSharkProfileButton() 
    } 

} 

Espérons que tout a un sens :)