我使用以下代码介绍了ViewController1:
let vc1 = ViewController1()
present(vc1, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
现在,我想在ViewController1中显示ViewController2。
@IBAction func buttonEvent(_ sender: UIButton) {
let vc2 = ViewController2()
self.present(vc2, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
问题是:我想在调用按钮事件时关闭当前ViewController时显示ViewContoller2。
我想同时做动画。
谢谢。
您可以通过navigationController以下方法实现此目的:
guard var viewControllers = sourceViewController.navigationController?.viewControllers else { return }
// FIXME: Result of call to 'popLast()' is unused
// Pop sourceViewController
viewControllers.popLast()
// Push targetViewController
viewControllers.append(targetViewController)
sourceViewController.navigationController?.setViewControllers(viewControllers, animated: true)
Run Code Online (Sandbox Code Playgroud)
获取viewControllers在导航堆栈在第一。弹出当前并追加目标之一。然后,将堆栈设置为update viewControllers。
(对于不使用的人navigationController)
我在给定的答案中意识到了一个可能的问题。因此,我想添加此内容。在继续之前,请检查父母的文件。我想强调这一部分:
如果接收者是容器视图控制器的子代,则此属性保存包含在其中的视图控制器。如果接收者没有父代,则此属性中的值为nil。在iOS 5.0之前的版本中,如果视图没有父视图控制器且正在呈现,则将返回呈现视图控制器。在iOS 5上,此行为不再发生。而是使用presentingViewController属性访问展示视图控制器。
简而言之,如果您要关闭当前UIViewController(sourceViewController)并显示下一个(targetViewController),则应present()从presentingViewController当前位置进行呼叫。
weak var presentingViewController = self.presentingViewController
sourceViewController.dismiss(animated: true, completion: {
presentingViewController?.present(targetViewController, animated: false, completion: nil)
})
Run Code Online (Sandbox Code Playgroud)
虽然你可能会看到这一次的转型,在该年底completion的sourceViewController的dismiss(),在presentingViewController将显示,直到targetViewController呈现。我不知道您是否期望这种行为。如果没有,我暂时无法提出解决方法。
小智 6
这对我有用
viewControllers = self.navigationController?.viewControllers
viewControllers.remove(at: viewControllers.count - 1)
self.navigationController?.setViewControllers(viewControllers, animated: true)
self.performSegue(withIdentifier: "destinationVC", sender: self)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7002 次 |
| 最近记录: |