【问题标题】:Dismiss only presented view controller not the whole navigation stack Swift仅关闭呈现的视图控制器而不是整个导航堆栈 Swift
【发布时间】:2020-04-24 20:05:21
【问题描述】:

我有一个标签栏控制器。其中第一个选项卡是导航控制器。让我们称它为控制器 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) 在视图控制器 C 中。它返回到根视图控制器,即 vc A。我希望它转到 VC B。

【问题讨论】:

  • 当你调用self.dismiss时,你不是在C上调用dismiss,而是在B上调用dismiss。你试过popViewController吗?
  • 我已经在 vc C 中编写了关闭代码。并且弹出视图控制器将无法工作,因为 C 以模态方式呈现而不是推送
  • 我想你已经尝试过 "vc.dismiss()" 而不是 self.dismiss() ?
  • 是的,已经试过了
  • 你可以添加你的故事板的截图吗?

标签: ios swift uinavigationcontroller presentmodalviewcontroller dismissviewcontroller


【解决方案1】:

经过一番思考,我复制了您尝试做的事情,并发现问题不在于调用驳回。这是您首先调用该视图控制器的方式。稍微改变你的“B to C”代码。

代替:

让 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 在我的电脑上测试了这个。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 2017-09-19
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多