隐藏 VC 并从以前的 VC 转移到新的 VC?

Posted

技术标签:

【中文标题】隐藏 VC 并从以前的 VC 转移到新的 VC?【英文标题】:Hide a VC and segue from previous VC to new VC? 【发布时间】:2018-03-23 06:56:38 【问题描述】:

我想在堆栈顶部隐藏 ViewController 说 VC 。那么这个VC下面的VC必须被segue到新的VC中。并将之前隐藏的 VC 取消隐藏到 segue 堆栈的顶部。我怎样才能做到这一点??

即,我想说的是:

Segue Stack 初始 -> VC1 -> VC2

然后隐藏 VC2 并从 VC1 转接 -> VC3

然后在其上方显示 VC2。

最终的 Segue 堆栈 -> VC1 -> VC3 -> VC2

【问题讨论】:

请详细说明问题,使用 VC1 和 VC2 而不是仅 VC 用于两个不同的视图控制器。人们无法理解这一点。 @PaulMarshal 抱歉,问题已通过编辑详细说明。 你想从 VC1 或 VC2 做 VC3 的 segue 吗? 从 VC1 开始 -> VC3 @Koen 已修复。 【参考方案1】:

你可以这样做

在 VC2 中,您可以像这样关闭 VC2 并将 VC3 推送到堆栈

self.dismiss(animated: true) 
    self.navigationController?.pushViewController(VC3, animated: true)

你可以在 VC3 加载时推送 VC2

【讨论】:

【参考方案2】:

您可以通过操作 navigationController.viewController 属性来实现。看看如何..

例如,您想从堆栈中删除一个 ViewController,然后执行以下操作..

NSMutableArray *newStack=[[NSMutableArray alloc] init];

for(id controller in self.navigationController.viewControllers)
    if(![controller isKindOfClass:[YourViewControllerToRemove class]])
         [newStack addObject:controller];
    

最后给数组赋值

self.navigationController.viewControllers=newStack;

不在数组中的控制器将被移除。

现在当你想添加时,只需使用

[self.navigationController pushViewController:<YourViewController> animated:YES];

注意:检查移除的 ViewController 是否释放。

干杯。

【讨论】:

我的程序中有很多类似的情况我无法硬编码所有内容。 @ashinasok 你不需要硬编码..你可以制作全局函数来执行类似的操作,只需将 ViewController 作为参数传递给要执行的操作..【参考方案3】:

UINavigationController的方法怎么样,setViewControllers(:animated:)

let viewList: [UIViewController] = [V1, V2]
self.navigationController?.setViewControllers(viewList, animated: true)

更新

V1, V2 是类的实例。它们是从情节提要或代码创建的。如果它们已经存在于UINavigationController的堆栈中,则可以从UINavigationController.的viewControllers属性中解析出来

let list = self.navigationController?.viewControllers
for v in list 
    // if v is V1 or V2 ....

我写了一个示例项目和put it on here: https://app.box.com/file/284901357701。

【讨论】:

他们是UIViewController 你的意思是它是视图控制器类吗?? 你可以使用setViewControllers(:animated:)来管理UINavigationController里面的栈。例如,我有一个带有[V1, V2, V3, V4] 的堆栈,我从V4 返回,但我希望堆栈为[V1,V2],然后我在从V4 返回时调用setViewControllers(:animated)[V1,V2] 我的问题是如何获得这个 v1,v2,v3 就像它是视图控制器类? 我给了 viewcontroller 类,但它没有查看。

以上是关于隐藏 VC 并从以前的 VC 转移到新的 VC?的主要内容,如果未能解决你的问题,请参考以下文章

创建视图控制器并将现有 VC 的标签和按钮添加到新的 VC Swift iOS

如何从集合视图单元导航到新的视图控制器?在斯威夫特

在 Swift 中的同一个 VC 上点击按钮后,有没有办法显示以前隐藏在早期代码行中的 UI 元素?

快速解除模式并推送到新的 VC

iOS 13 UIActivityViewController 在图像保存后自动呈现以前的 VC

vc6.0 mfc窗口问题