我正试图在一个特定的Container View
上切换两个孩子View Controllers
。我有一个Navigation Controller
与一个菜单(Table View
做出菜单的不同选项)。如何在Swift上切换两个子视图控制器?
每次我点击菜单的一个选项,我想改变Container View
的孩子,但我得到上述Navigation bar
和Table View
子(未示出它们,但它们是新的子视图控制器下)。
我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
功能(我在其中检测单击菜单的选项时),以改变孩子视图控制器下面的代码容器视图:
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)
}
此代码运行得很好。问题是新的子View Controller显示在导航栏和Table View(菜单)上方。所以它占据了整个屏幕,而不是放在容器视图中。
我应该添加更多的东西给我的代码还是我用错误的方式使用我的代码?我已经搜索了很多关于它的内容,但大多数解决方案都是在objective-c中,或者不适合我。
编辑:搜索了很多小时后,我怀疑这是同根View Controller
与master
视图控制器连接的嵌入式SEGUE相关的东西,但我不能够嵌入新的孩子到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。我是全新的,所以也许我错了,我可以同时使用两者。如果我错了,请纠正我。 –