我有3个视图控制器。
将它们命名为A,B和C。
A提出B,然后在解散B后从A提出C。
A <=> B
A-> C
我该如何实现? 如果问题不清楚,请告诉我,我很乐意对其进行编辑。
答案 0 :(得分:0)
在 B 中写一个协议,例如:
protocol VCBDelegate {
func VCBDismissed()
}
Class VCB: UIViewController {
weak var delegate: VCBDelegate?
....
}
现在解雇B的地方,请完整地调用委托方法。
func dismissB() {
self.dismiss(animated: true) {
self.delegate.VCBDismissed()
}
}
现在在 A 中遵守此协议。
extension VCA: VCBDelegate {
func VCBDismissed() {
//Here you present C
.....
}
}
别忘了在 B 的演示中使代表成为自己。
希望这会有所帮助,如有任何疑问,请随时发表评论。
答案 1 :(得分:0)
在B里面试试这个
self.dismiss(animated: true) {
let aVC = UIApplication.shared.keyWindow?.rootViewController as! AVC
let cVC = ///
aVC.present(cVC, animated: true, completion: nil)
}
答案 2 :(得分:0)
好吧,我是这样实现的。 注意:我在 B 内。
let cViewController = // getting a handle of this view controller from Storyboard
let aViewController = self.navigationController?.presentingViewController
self.dismiss(animated: true) {
aViewController?.present(cViewController, animated: true)
}
答案 3 :(得分:0)
您可以使用自定义通知观察器,如下所示:
在控制器A中:
override func viewDidLoad() {
super.viewDidLoad()
// Register to custom notification
NotificationCenter.default.addObserver(self, selector: #selector(presentC), name: NSNotification.Name(rawValue: "BDismissed"), object: nil)
// Rest of your code
}
func presentC {
// Controller C presentation code goes here
}
在控制器B中:
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "BDismissed"), object: nil, userInfo: nil)
}
答案 4 :(得分:0)
您可以使用闭包,它更好,更简单。 您的A将出示B,并在其关闭时给其闭包呼叫,此闭包将出示C。
这里是一个例子:
class ViewControllerA : UIViewController{
func showViewControllerB(){
let vc = ViewControllerB()
vc.callOnDismiss = { [weak self] in
self?.showViewControllerC()
}
self.present(vc, animated: true, completion: nil);
}
func showViewControllerC(){
let vc = ViewControllerC()
self.present(vc, animated: true, completion: nil);
}
}
class ViewControllerB : UIViewController{
var callOnDismiss : () -> () = {}
func actionOnDismiss(){
self.dismiss(animated: true, completion: nil)
self.callOnDismiss()
}
}
class ViewControllerC : UIViewController{
}