1) 每次运行这些函数中的任何一个时,都会创建子控制器的全新实例。因此
isViewLoaded
总是错误的,执行流到你的
else
每次都封锁。
else if
不需要。
3) 如果上述问题解决了,你就不应该打电话
didMove(toParentViewController:)
换回来。您应该只是隐藏和取消隐藏视图。
解决办法如下:
1) 将引用作为实例变量指定给子控制器,并且仅当该引用为nil时才创建子控制器。
已加载isViewLoaded
,检查实例变量引用是否为nil。
if
其他的
条款-这是多余的。
4) 在你的
isHidden
.
下面是一个示例实现:
private var firstChild: UIViewController?
private var secondChild: UIViewController?
@objc func changeView1(_ kMIDIMessageSendErr: Any?) {
if firstChild != nil {
firstChild?.view.isHidden = false
secondChild?.view.isHidden = true
} else {
firstChild = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "View1")
self.addChildViewController(firstChild!)
self.view.addSubview(firstChild!.view)
firstChild!.didMove(toParentViewController: self)
}
}
@objc func changeView2(_ kMIDIMessageSendErr: Any?) {
if secondChild != nil {
firstChild?.view.isHidden = true
secondChild?.view.isHidden = false
} else {
secondChild = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "View2")
self.addChildViewController(secondChild!)
self.view.addSubview(secondChild!.view)
secondChild!.didMove(toParentViewController: self)
}
}