解雇目前的视图控制器后提出新的视图控制器 - swift
我试图解雇一个VC并提出一个新的VC。但我不希望旧的VC再存在。我使用下面的代码来解散当前的VC并呈现新的。但这样,解雇与现在之间有一段时间间隔。我不希望用户注意到这一点。所以,我想先介绍一下新的VC,然后解散前一个。有没有办法做到这一点?解雇目前的视图控制器后提出新的视图控制器 - swift
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。这意味着,出示您的destinationController
使用当前的VC,然后当你回去,认为这两个VC的
我认为这将是一个更好的主意,感谢您的帮助。 –
免责声明
所以,除非你绝对需要模态地呈现新的VC,那么我建议只是执行SEGUE两个VC之间。看起来你只是以模态方式呈现它,因为你想在以后从原始VC手动解除它。在我看来,不仅使用segue更容易,而且它还允许您使用下面概述的方法。
解决方案
这可能不是最巧妙的方法,但你可以通过prepareForSegue
通过老VC的情况下一个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
}
}
}
那么当然,你只需要提出新的VC,当你想要的,然后一切都会照顾。
它看起来像是以模态的方式呈现VC的,所以不会在提交的VC上解雇所提交的VC以及解雇? – JohnnyAW
@JohnnyAW我看到这里的困境。没有看到。幸运的是,他似乎只是模态地呈现,以便以后可以手动解散它。因此,如果他只是执行一个赛格,那么就不应该有问题。我将编辑我的帖子以包含此信息。 –
为什么不按顺序,先出现然后解雇(而不是现在的完成处理程序)呢?所以: 'presentVC!.present(destinationController,animated:true,completion:nil); self.dismiss(animated:false,completion:nil)' –
朋友你为什么要从堆栈中解散currentVc? –
直接可以通过使动画为假来解雇您。 –