仅关闭呈现的视图控制器而不是整个导航堆栈 Swift

Dismiss only presented view controller not the whole navigation stack Swift

我有一个标签栏控制器。其中第一个选项卡是导航控制器。让我们称之为控制器 A。然后我将另一个视图控制器推到它上面。让我们称之为控制器 B。 之后,我从视图控制器 B 中呈现视图控制器 C。现在我只想关闭视图控制器 B。

Tab Bar - A(Navigation Controller's root vc) -> Push VC -> B -> Present VC -> C

A 到 B 正在使用 self.navigationController.pushViewController(animated: true, completion: nil)

B 到 C 是这样的
let vc = CViewController() vc.modalPresentationStyle = .fullScreen self.present(vc,animated: true,completion: nil)

现在当我使用 self.dismiss(animated: true, completion: nil) 在 View Controller C 中。它返回到根视图控制器,即 vc A。我希望它转到 VC B。

经过一番思考,我复制了您尝试执行的操作,发现问题不在于调用 dismiss。首先是您调用该视图控制器的方式。稍微更改您的“B 到 C”代码。

而不是:

let vc = CViewController()

vc.modalPresentationStyle = .fullScreen

self.present(vc,animated: true,completion: nil)

使用:

let sb : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = sb.instantiateViewController(identifier: "C")
vc.modalPresentationStyle = .fullScreen
self.present(vc, animated: true, completion: nil)

您必须在情节提要中指定视图控制器的标识符,(情节提要 ID)

现在当您调用 self.dismiss() 时,它应该只关闭 C。 我已经在我的电脑上用 Xcode 11.1.

测试了这个