如何删除 VC 然后直接添加另一个 VC
How to remove a VC then add another VC directly afterward
我有一个 Main VC(称之为 VC A),它有一个 child VC(VC B)。当我在 VC B 上点击一个按钮时,我将其视为 child VC,但是一旦完成,我想实例化另一个 VC (VC C ).我通过在 VC B 上创建一个 bool 来做到这一点,如果为真,则在 VC A 上调用一个函数,该函数创建一个新的 child VC (VC C) .所有的函数调用都在进行,但是 VC C 从未被添加。下面我添加了代码:
VC乙:
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答:
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)
}
let instVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MainViewController") as! MainViewController
此行创建(实例化)您的 MainViewController 的新实例,它不是您当前显示的 MainViewController。
您需要维护对第一个 MainViewController 的引用(可能通过访问主 window 上的 rootViewController
。并向其添加新的弹出窗口。
您正在 callAddVC()
上创建 ViewController A (MainViewController)
的新实例,这是错误的。您没有使用 ViewController A
的现有实例
您必须在添加 Viewcontroller B
时传递 Viewcontroller A
实例
Viewcontroller一个
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.
}
}
}
我有一个 Main VC(称之为 VC A),它有一个 child VC(VC B)。当我在 VC B 上点击一个按钮时,我将其视为 child VC,但是一旦完成,我想实例化另一个 VC (VC C ).我通过在 VC B 上创建一个 bool 来做到这一点,如果为真,则在 VC A 上调用一个函数,该函数创建一个新的 child VC (VC C) .所有的函数调用都在进行,但是 VC C 从未被添加。下面我添加了代码:
VC乙:
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答:
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)
}
let instVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MainViewController") as! MainViewController
此行创建(实例化)您的 MainViewController 的新实例,它不是您当前显示的 MainViewController。
您需要维护对第一个 MainViewController 的引用(可能通过访问主 window 上的 rootViewController
。并向其添加新的弹出窗口。
您正在 callAddVC()
上创建 ViewController A (MainViewController)
的新实例,这是错误的。您没有使用 ViewController A
您必须在添加 Viewcontroller B
Viewcontroller A
实例
Viewcontroller一个
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.
}
}
}