Próbuję przełączać między dwoma dziećmi View Controllers
na konkretnej Container View
. Mam Navigation Controller
z menu (Table View
, aby uzyskać różne opcje menu).Jak mogę przełączać się między dwoma kontrolkami widoku dziecka na Swift?
każdym razem kliknij opcję menu chciałbym zmienić dziecku z Container View
ale jestem coraz dziecko powyżej Navigation bar
i Table View
(nie są pokazane, ale są one w ramach nowego dziecka View Controller).
Schemat mojego Main.storyboard jest tak:
Navigation Controller --> View Controller (With 2 Container View, 1 for Table View
and the other to set master View Controller)
|
|
------------------------
| |
View Controller Table View
(id: master)
View Controller (id: Home) View Controller (id: screen2)
Mam następujący kod na tableView
funkcji (w którym wykryć gdy opcja menu kliknięciu), aby zmienić dziecku View Controller Widok kontenera:
let currentController = self.navigationController?.visibleViewController //container
var oldChild = (currentController?.childViewControllers.last!)! as UIViewController //master
let newChild = (storyboard?.instantiateViewControllerWithIdentifier("Home"))! as UIViewController //Home
if (oldChild != newChild){
if currentController.childViewControllers.last != nil{
oldChild.willMoveToParentViewController(nil)
currentController.navigationController?.navigationBar.willRemoveSubview(oldChild.view)
//oldChild.view.removeFromSuperview()
oldChild.removeFromParentViewController()
}
currentController.addChildViewController(newChild)
currentController.view.addSubview(newChild.view)
newChild.didMoveToParentViewController(currentController)
}
Ten kod działa prawie dobrze. Problem polega na tym, że nowy kontroler widoku dziecka jest wyświetlany nad paskiem nawigacji i widokiem tabeli (menu). Zajmuje cały ekran zamiast pasować do widoku kontenera.
Czy powinienem dodać coś więcej do mojego kodu lub czy używam mojego kodu w niewłaściwy sposób? Dużo o tym przeszukałem, ale większość rozwiązań jest obiektywna lub nie działa dla mnie.
EDIT: Po poszukiwaniach na wiele godzin Podejrzewam, że jest to coś związane z wbudowaną segue, który łączy korzeń View Controller
z master
View Controller, ale nie jestem w stanie osadzić nowe dziecko do Container View
. Kod, który próbuję to:
currentController.performSegueWithIdentifier("EmbedSegue", sender: newChild)
lub
currentController.presentViewController(newChild, animated: true, completion: nil)
ale żaden z nich osadzić segue. Po prostu wyświetl numer newChild
na pełnym ekranie.
Z góry dziękuję!
Czy dodałeś widok childVC do bieżącego widoku VC? – Horst
Mam nadzieję, że przeczytacie to: https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html - ma wszystko, czego potrzeba, korzystając z jasnych przykładów kodu. – Losiowaty
@Losiowaty Spojrzałem na tę stronę wcześniej, ale zamknąłem ją, ponieważ nie wygląda na Swift, którego używam. Jestem całkowicie nowy, więc może się mylę i mogę używać obu jednocześnie. Proszę, popraw mnie jeśli się mylę. –