如何从 navigationController(viewControllers/stack) 弹回指定 viewController?
Posted
技术标签:
【中文标题】如何从 navigationController(viewControllers/stack) 弹回指定 viewController?【英文标题】:How to pop back to specify viewController from navigationController(viewControllers/stack)? 【发布时间】:2012-11-15 07:45:52 【问题描述】:我创建了一个具有串行视图(A、B、C、D、...)的应用程序,我需要将 D 弹回 B。 有人可能会说为什么不使用:
[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:1] animated:YES];
但是,这不是一个好的解决方案。因为这个方法需要你获取我们的“B”所在的索引。
问题:如何获取viewControllers中“B”的索引?
UIViewControllers
中的格式应为:
"",
"",
"",
"",
""
我尝试使用 rangeOfString
和 hasPrefix
获取“B”视图的索引,但失败了。
【问题讨论】:
查找展开序列。这里有几个关于他们的问题。这就是你想要使用的。 【参考方案1】:在这里我想知道 NavigationController 通过 Concept Of Stack
.ie LAST COME FIRST OUT
管理 ViewController。这里有两种相同的方法。
1)在这里您可以进行迭代以获得所需的 ViewController,如下所示
for (id controller in [self.navigationController viewControllers])
if ([controller isKindOfClass:[BViewController class]])
[self.navigationController popToViewController:controller animated:YES];
break;
2) 这里有A,B,C,D
控制器。表示B
将排在第三位,所以你能做什么
您可以将索引硬连线如下
[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:2] animated:YES];
希望对你有帮助。。
【讨论】:
【参考方案2】:你可能会这样做:
for (UIViewController *controller in [self.navigationController viewControllers])
if ([controller isKindOfClass:[B class]])
[self.navigationController popToViewController:controller animated:YES];
break;
更新:
在 ios 6 中,您可以只使用 unwind segues,它会为您处理所有这些。只需转到您的 B 类,定义一个展开操作(通过IBAction
返回类型和UIStoryboardSegue
参数的组合来识别),例如:
- (IBAction)done:(UIStoryboardSegue *)segue
// do any clean up you want
然后,由 B 提供的任何控制器都可以创建展开转场,例如,control - 从按钮拖动到场景停靠栏中的退出图标。您可以选择让您正在展开的控制器执行预期的prepareForSegue
(在 B 的展开操作之前调用)。
【讨论】:
@Lothario 我已经更新了我对 unwind segues 的回答,它完成了同样的事情(还有更多)。但这仅限于 iOS 6 或更高版本。以上是关于如何从 navigationController(viewControllers/stack) 弹回指定 viewController?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 TabBarController 上 NavigationController 的 TableViewController 子项锁定旋转
如何从 navigationController(viewControllers/stack) 弹回指定 viewController?
如何使用 Flip Transition 从 UIView 转到带有 NavigationController 的 TableViewController?
如何从 ViewController 中分离(推送)到 NavigationController 中嵌入的另一个 ViewController?