我有一个主VC(称为VC A),它有一个子VC(VC B)。当我点击VC B上的一个按钮时,我将其视为子VC,但是一旦完成,我想实例化另一个VC(VC C)。我这样做是通过在VC B上创建一个bool,如果为true,则在VC A上调用一个创建新子VC(VC C)的函数。正在进行所有函数调用,但VC C永远不会被添加。下面我添加了代码:
VC B:
func removeAnimate()
{
self.willMove(toParentViewController: nil)
self.view.removeFromSuperview()
self.removeFromParentViewController()
didTransition = true
if didTransition == true {
callAddVC()
}
}
func callAddVC() {
let instVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MainViewController") as! MainViewController
instVC.addVC()
}
VC A:
func addVC () {
let popvc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CommentsTabViewController") as! CommentsTabViewController
self.addChildViewController(popvc)
popvc.view.center = self.view.center
popvc.view.bounds.size = CGSize(width: 337, height: 503)
self.view.addSubview(popvc.view)
popvc.didMove(toParentViewController: self)
}
答案 0 :(得分:2)
您正在ViewController A (MainViewController)
上创建callAddVC()
的新实例,这是错误的。您没有使用ViewController A
您必须在添加Viewcontroller A
Viewcontroller B
个实例
Viewcontroller A
let viewControllerB = // Get the instance of UIViewControllerB from storyboard
viewControllerB.vcA = self
Viewcontroller B
class UIViewControllerB {
weak var vcA: UIViewControllerA?
func removeAnimate() {
self.willMove(toParentViewController: nil)
self.view.removeFromSuperview()
self.removeFromParentViewController()
didTransition = true
if didTransition == true {
vcA.addVC(). //You have to call addVC() by using the reference of the main view controller.
}
}
}
答案 1 :(得分:1)
让instVC = UIStoryboard(名称:“Main”,bundle:nil).instantiateViewController(withIdentifier:“MainViewController”)为! MainViewController
这一行创建(实例化)MainViewController的一个新实例,它不是你当前显示的MainViewController。
您需要维护对第一个MainViewController的引用(可能通过访问主窗口上的rootViewController
。并将新的popover添加到该窗口。