【发布时间】:2020-03-30 05:59:39
【问题描述】:
我正在 swift 中创建一个 IOS 应用程序,但我发现了一个很大的问题。
如果我要在 Android 中执行此操作,我会使用片段并将当前片段替换为新片段,但在 swift 中似乎没有什么与片段相等,所以。
我从视图控制器 A 开始,然后导航到视图控制器 B(用户应该在此视图中选择他们的名字)并且从 BI 想要导航到 C。但是当我导航到 CI 时需要视图控制器 B被解雇以避免堆叠。但是我找不到一个好方法来删除当前的视图控制器并导航到一个新的。
func navigateToService(selectedCar: String!){
if let storyboard = storyboard{
let vc = storyboard.instantiateViewController(withIdentifier: "BookServiceViewController") as! BookServiceViewController
self.dismiss(animated: true) //<---
vc.selectedCar = selectedCar
self.present(vc, animated: true)
}
}
到目前为止,我已经尝试了很多。但在我的情况下似乎没有任何效果。我在线程中添加的代码只是立即关闭视图,并没有打开新视图。
那么我该如何从 A -> B -> Dimiss B -> C 导航?
临时编辑,将被删除
func navigateToService(selectedCar: String!){
self.dismiss(animated: true) {
if let storyboard = self.storyboard{
let vc = storyboard.instantiateViewController(withIdentifier: "BookServiceViewController") as! BookServiceViewController
vc.selectedCar = selectedCar
self.present(vc, animated: true)
}
}
}
【问题讨论】:
-
如果你想从C回到A,你可以通过storyboard使用unwindSegue,或者popToViewController(viewControllerA)。没有必要解雇B
-
@AlexandrKolesnik 我想解除 B 的原因是因为我使用的是“自动”,当我拖动视图控制器 C(使其解除)时,视图控制器 B 仍然存在。所以我必须在下拉解散时同时解散 C 和 B
-
你试过
self.present(vc, animated: true, completion: { self.dismiss(animated: true) })吗? -
在这种情况下,您必须将所选项目从 B 传递给 A,在 completionBlock 中关闭 B,调用 C
-
您可以尝试将您的第一个 vc 添加为子视图,然后将其从父视图中删除并设置您的下一个视图