如何在视图控制器之间移动?

问题描述 投票:0回答:1

我有第一个带有导航栏的视图控制器。接下来,我转到带有导航栏的第二个视图控制器。接下来我想进入带有导航栏和

overCurrentContext
选项的第三视图控制器。在第三个视图控制器中,我希望后退按钮返回到第一个视图控制器。我使用这段代码来做到这一点:

在第二个VC中:

let detailViewController = ThirdVC()
self.navigationController?.modalPresentationStyle = .overFullScreen
self.navigationController?.pushViewController(detailViewController, animated: false)

在第三个 vc 中用于后退按钮:

self.navigationController?.popToRootViewController(animated: false)

但是我看不到第二个 vc 作为第三个 vc 的背景。

.overCurrentContext
不起作用。我看到灰色背景。怎么解决?

ios swift uikit
1个回答
0
投票
  • .overFullScreen 是一种 modalPresentationStyle,因此它仅在您以模态方式“呈现”视图时才起作用。所以它不适用于推送,它将 ViewController 推送到导航堆栈中。

  • 在您的情况下,如果您确实想以模态方式呈现 ThirdVC,然后从 SecondVC 弹出到 rootViewController,因为 SecondVC 已被推送到导航堆栈。您可以通过使用委托模式通知第二个 VC 弹出以重新 rootVC 来实现这一点。

  • 另一种方法是使用闭包,如下所示:

在你的thirdVC中,声明一个闭包:

var onPopToRoot:(()-> Void)

然后在你的 pop 函数中,例如:

@objc private func popToRoot() {
      onPopToRoot?()
      dismiss(animated: true)
}

在你的第二个VC中:

@objc private func goThird() {
        let detailViewController = ThirdVC()
        self.navigationController?.modalPresentationStyle = .overFullScreen
        detailViewController.onPopToRoot = {[weak self] in
            self?.navigationController?.popToRootViewController(animated: true)
        }
        self.present(detailViewController, animated: true, completion: nil)
    }
© www.soinside.com 2019 - 2024. All rights reserved.