我想弹出窗帘后面的根,同时以模态方式呈现一个新的视图控制器。当用户完成这个新的视图控制器时,它将被解除,并且navigationcontroller的根视图控制器将在它后面。
我尝试过使用
self.navigationController?.popToRootViewController(animated: false)
在prepareForSegue:
方法内,但它在模态视图控制器完全呈现之前显示了根视图控制器(因此向用户显示窗帘背后发生了什么,这不是一个理想的特征)。
如果尝试弹出模态显示的视图控制器的viewDidLoad:
,则根本不会发生任何事情。
解决此问题的最佳方法是什么?
答案 0 :(得分:0)
扭转局面并同时解除模态加popToRootViewController
。
不确定你是否可以使用StoryBoards(因为我更像是一个XIB人),所以你可能需要更多的代码。
答案 1 :(得分:0)
有很多不同的方法可以实现这一目标。这个将通过委托在后台弹出FirstViewController。
class FirstViewController: UIViewController {
@IBOutlet weak var presentModal: UIBarButtonItem!
@IBAction func action(_ sender: Any) {
self.performSegue(withIdentifier: "presentModal", sender: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "presentModal" {
let destVC = segue.destination as! UINavigationController
let topVC = destVC.topViewController as! SecondViewController
topVC.delegate = self
}
}
}
extension FirstViewController: SecondViewControllerDelegate {
func didDismissModal(_ controller: SecondViewController) {
self.navigationController?.popViewController(animated: false)
}
}
protocol SecondViewControllerDelegate {
func didDismissModal(_ controller: SecondViewController)
}
class SecondViewController: UIViewController {
var delegate: SecondViewControllerDelegate?
@IBAction func action(_ sender: Any) {
self.delegate?.didDismissModal(self)
self.dismiss(animated: true, completion: nil)
}
}