Я пытаюсь переключиться между двумя детьми View Controllers
по конкретному Container View
. У меня есть Navigation Controller
с меню (Table View
, чтобы сделать различные варианты меню).Как я могу переключаться между двумя дочерними контроллерами просмотра в Swift?
Каждый раз, когда я нажимаю опцию меню, я хотел бы изменить ребенок в Container View
, но я получаю ребенок выше Navigation bar
и Table View
(они не показаны, но они находятся под новым ребенком View Controller).
Схема моего Main.storyboard как это:
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)
У меня есть следующий код на tableView
функции (в которых я определить, когда опция меню нажата), чтобы изменить ребенка View Controller of Container Вид:
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)
}
Этот код работает почти нормально. Проблема в том, что новый дочерний контроллер просмотра отображается над панелью навигации и табличным представлением (меню). Таким образом, он занимает весь экран, а не вписывается в вид контейнера.
Должен ли я добавить что-то еще в свой код, или я использую свой код неправильно? Я много искал об этом, но большинство решений находится в объективе-c или не работает для меня.
EDIT: После поиска много часов я подозреваю, что это что-то связано с Segue, что поместить его соединяет корень View Controller
с master
View Controller, но я не в состоянии внедрить новый ребенок в Container View
. Код, который я пытаюсь это:
currentController.performSegueWithIdentifier("EmbedSegue", sender: newChild)
или
currentController.presentViewController(newChild, animated: true, completion: nil)
, но ни один из них не встраивать SEGUE. Просто покажите newChild
на полном экране.
Заранее благодарен!
Вы добавили представление childVC в текущий вид VC? – Horst
Надеюсь, вы прочтете это: https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html - у него есть все, что вам нужно, с явными примерами кода. – Losiowaty
@ Losiowaty Я просмотрел эту страницу раньше, но я ее закрыл, потому что она не выглядит Swift, которую я использую. Я совершенно новый, поэтому, возможно, я ошибаюсь, и я могу использовать оба одновременно. Пожалуйста, поправьте меня, если я ошибаюсь. –