Ios 如何在Swift中替换ViewController?
我使用以下代码演示了ViewController1:Ios 如何在Swift中替换ViewController?,ios,swift,Ios,Swift,我使用以下代码演示了ViewController1: let vc1 = ViewController1() present(vc1, animated: true, completion: nil) 现在,我想在ViewController1中显示ViewController2 @IBAction func buttonEvent(_ sender: UIButton) { let vc2 = ViewController2() self.present(vc2, anima
let vc1 = ViewController1()
present(vc1, animated: true, completion: nil)
现在,我想在ViewController1中显示ViewController2
@IBAction func buttonEvent(_ sender: UIButton) {
let vc2 = ViewController2()
self.present(vc2, animated: true, completion: nil)
}
问题是:我想在调用按钮事件时取消当前ViewController时显示ViewController2
我想在这样做的同时制作动画
谢谢。您可以通过以下
导航控制器来实现:
guard var viewControllers = sourceViewController.navigationController?.viewControllers else { return }
// Popped ViewController not used
_ = viewControllers.popLast()
// Push targetViewController
viewControllers.append(targetViewController)
sourceViewController.navigationController?.setViewControllers(viewControllers, animated: true)
首先在导航堆栈中获取viewControllers
。弹出当前文件并附加目标文件。然后,将堆栈设置为更新的viewControllers
添加物
(适用于不使用导航控制器的用户)
我意识到在给出的答案中可能有一个问题。因此,我想补充一下。检查后再继续。我想强调这一部分:
如果收件人是容器视图控制器的子级,则
属性保存它所包含的视图控制器。如果
收件人没有父项,此属性中的值为零。之前
iOS 5.0,如果视图没有父视图控制器并且正在
呈现时,将返回呈现视图控制器。在iOS 5上,
这种行为不再发生。相反,使用
presentingViewController属性以访问演示视图
控制器
简而言之,如果要关闭当前的UIViewController
(sourceViewController
)并显示下一个(targetViewController
),应该从当前的presentingViewController
调用present()
weak var presentingViewController = self.presentingViewController
sourceViewController.dismiss(animated: true, completion: {
presentingViewController?.present(targetViewController, animated: false, completion: nil)
})
虽然您可能会看到这次的转换,但在sourceViewController
的完成的disclose()
结束时,presentingViewController
将显示,直到显示targetViewController
。我不知道你是否期待这种行为。如果没有,我现在还不能想出一个解决办法来防止这种情况 这对我有用
viewControllers = self.navigationController?.viewControllers
viewControllers.remove(at: viewControllers.count - 1)
self.navigationController?.setViewControllers(viewControllers, animated: true)
self.performSegue(withIdentifier: "destinationVC", sender: self)
您可以在SceneDelegate
中创建函数,修改根视图控制器,并使用(UIApplication.shared.connectedScenes.first?.delegate as?SceneDelegate)?访问它。您的函数在此(视图:UIViewController)
。除非你的应用程序不使用导航控制器或选项卡视图,否则你可能只需要使用一个presetSegue()函数
您想要什么,在按钮上不应关闭ViewController1,并且ViewController2应与当前动画一起显示?是的,我希望ViewController2在ViewController1关闭时打开。如果我能做到,我想在这里过渡动画。你可以使用视图控制器过渡动画很好的解决方案,但我没有navigationController。