我有一个关于使用ContainerView添加/删除childviewcontrollers的问题。
我有一个名为" ContainerViewController"的UIViewController;它包含一个ContainerView,这个ContainerView有一个名为" ContainerLinkViewController"的UIViewController。我还有另外四个UIViewControllers,它们将被添加到这个" ContainerLinkViewController"每当用户点击其中一个位于" ContainerViewController"底部的标签按钮时。故事板如下所示。
请注意,连接到这四个UiView控制器的自定义segue只是空segue,除了在storyboard中显示可视连接外什么都不做。
所以我要做的是首先将第一个选项卡ViewController添加到" ContainerLinkViewController"通过在viewDidLoad()中使用下面的代码作为childViewController。
let firstTabViewController = self.storyboard?.instantiateViewController(withIdentifier: "FirstTabViewController") as! FirstTabViewController
self.addChildViewController(firstTabViewController)
firstTabViewController.view.frame = self.view.bounds
self.view.addSubview(firstTabViewController.view)
firstTabViewController.didMove(toParentViewController: self)
在初始设置之后,每当用户选中其中一个标签按钮时,我都会从" ContainerViewController"发送信号。将UIViewController作为新的childViewController添加到" ContainerLinkViewController"并使用以下代码切换旧的childViewController和这个新的childViewController。
func swapViewControllers(from : UIViewController, to : UIViewController) {
from.willMove(toParentViewController: nil)
self.addChildViewController(to)
to.view.frame = self.view.bounds
self.transition(from: from, to: to, duration: 1.0, options: UIViewAnimationOptions.transitionCrossDissolve, animations: nil) {
finished in
from.view.removeFromSuperview()
from.removeFromParentViewController()
to.didMove(toParentViewController: self)
}
}
在调用此" swaptViewControllers()"之前,我通过执行以下操作来获取旧的childViewController。
let oldChildViewController = self.childViewControllers.last
我的问题是这个" oldChildViewController"在初始设置后第一次单击其中一个选项卡时,为nil为nil。所以函数" swaptViewControllers()"甚至没有调用因为self.childViewControllers是空的。
我几天来一直在努力解决这个问题并找不到明确的答案。所以我决定在这里请求一些可能导致这种情况的帮助。
任何帮助?感谢。
注意:我正在使用swift 3.也许这会有助于回答我的问题,因为看起来很多事情都变得很快。