J'essaie de définir par programme/ou modifier le View Controller incorporé à l'intérieur d'un View Controller .
J'ai 3 contrôleurs de vue différents, que je voudrais montrer dans la vue conteneur, tout dépend si l'utilisateur est connecté ou non.
J'ai regardé autour de moi et essayé plusieurs codes, j'ai trouvé celui qui fonctionnait, mais le code a modifié la vue autonome et non la vue des conteneurs d'affichage.
Une grande partie du code que j'ai essayé n'a pas non plus été dans Swift 3, alors en tant que nouveau développeur d'applications, cela a été assez stressant, car j'ai essayé de le convertir en Swift 3.
Quelqu'un peut-il fournir une solution pour changer le contrôleur de vue intégré dans un conteneur de vues? Merci.
J'aurais peut-être trouvé une solution à cela. Je réponds ici, au cas où cela pourrait aider quelqu'un d'autre dans ma situation.
Ce que j’ai fait, c’est d’ajouter un nouveau Contrôleur de vue puis de l’intégrer au Conteneur de vue - Cela fonctionnera comme une "vue principale" - j’utilise ensuite ce contrôleur de vue vierge pour décider lequel autre contrôleur de vue doit être changé dans le self de la vierge.
Voici un code que j'ai dans le contrôleur de vue vide, mais je suppose que le contrôleur de vue vide peut également être utilisé comme contrôleur de vue principal (dans mon cas, pour "Compte"), puis il peut ajouter la vue de connexion/enregistrement en tant qu'enfant .
override func viewDidLoad() {
super.viewDidLoad()
updateView()
}
private lazy var loginViewController: loginViewController = {
// Load Storyboard
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
// Instantiate View Controller
var viewController = storyboard.instantiateViewController(withIdentifier: "loginViewController") as! loginViewController
// Add View Controller as Child View Controller
self.add(asChildViewController: viewController)
return viewController
}()
private lazy var registerViewController: registerViewController = {
// Load Storyboard
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
// Instantiate View Controller
var viewController = storyboard.instantiateViewController(withIdentifier: "registerViewController") as! registerViewController
// Add View Controller as Child View Controller
self.add(asChildViewController: viewController)
return viewController
}()
private func add(asChildViewController viewController: UIViewController) {
// Add Child View Controller
addChildViewController(viewController)
// Add Child View as Subview
view.addSubview(viewController.view)
// Configure Child View
viewController.view.frame = view.bounds
viewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
// Notify Child View Controller
viewController.didMove(toParentViewController: self)
}
private func remove(asChildViewController viewController: UIViewController) {
// Notify Child View Controller
viewController.willMove(toParentViewController: nil)
// Remove Child View From Superview
viewController.view.removeFromSuperview()
// Notify Child View Controller
viewController.removeFromParentViewController()
}
private func updateView() {
add(asChildViewController: registerViewController)
/*
if segmentedControl.selectedSegmentIndex == 0 {
remove(asChildViewController: sessionsViewController)
add(asChildViewController: summaryViewController)
} else {
remove(asChildViewController: summaryViewController)
add(asChildViewController: sessionsViewController)
}
*/
}
Crédit à ce type: https://cocoacasts.com/managing-view-controllers-with-container-view-controllers/
Le moyen le plus simple de le faire est d’avoir 3 vues de conteneur dans Storyboard les unes au dessus des autres, chacune d’elles étant connectée à un contrôleur de vue différent. les besoins de l'entreprise.
Ceci est décrit en détail dans cet article de blog . J'espère que cela t'aides!