VCを閉じて、新しいVCを提示しようとしています。しかし、私は古いVCがもう存在することを望まない。以下のコードを使用して、現在のVCを削除し、新しいコードを提示します。しかし、この方法では、解雇と現在の間に時間間隔があります。ユーザーにこれに気づいて欲しくありません。そのため、最初に新しいVCを提示してから、前のものを削除します。これを行う方法はありますか?
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let destinationController = self.storyboard?.instantiateViewController(withIdentifier: "login") as! Login
let presentingVC = self.presentingViewController
self.dismiss(animated: false, completion: { () -> Void in
presentingVC!.present(destinationController, animated: true, completion: nil)
})
最善の方法は、実際に戻ったときに現在のVCを閉じることだと思います。つまり、現在のVCを使用してdestinationController
を提示し、戻ったときに両方のVCを閉じます
免責事項
したがって、新しいVCをモーダルで提示する必要がある場合を除き、2つのVC間でセグエを実行することをお勧めします。後で元のVCから手動で削除したいので、モーダルでのみ表示しているようです。私の意見ではセグエを使用する方が簡単であるだけでなく、以下で概説する方法を使用することもできます。
ソリューション
これはおそらく最もエレガントな方法ではありませんが、古いVCを介してprepareForSegue
を介して次のVCに渡し、それを新しいVCで破棄することができますviewDidLoad
。
たとえば、新しいVCには次のようなものがあります。
class NewVC: UIViewController {
...
var prevVC: PrevVC!
override func viewDidLoad() {
super.viewDidLoad()
prevVC.dismiss(animated: false, completion: nil)
}
}
そのため、newVCが読み込まれると、以前のVCは破棄されます。 prevVCクラスで必要なことは、prepareForSegue
のインスタンスを渡すことだけです。
class PrevVC: UIViewController {
...
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destinationVC = segue.destination as? NewVC {
destinationVC.prevVC = self
}
}
}
もちろん、必要なときにnewVCを提示するだけで、他のすべての面倒を見ることができます。