隐藏 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 元素?