我有以下应用程序结构:
[root VC] tabbar -> nvc1 -> vc1 -> vc2 -> [modal formsheet] nvc2 -> vc3
我想要的是从vc3
放松到vc2
。基本上vc2
模态地呈现nvc2
控制器。
我将调用链记录到viewControllerForUnwindSegueAction:fromViewController:withSender
:
vc3
来电nvc2
nvc2
来电tabbar
所以我看到的是展开机制仅向上遍历,但呈现nvc2
- vc2
的原始控制器位于tabbar > nvc1
如何解决这个问题?
答案 0 :(得分:0)
与我之前看到的其他实现不同,canPerformUnwindSegueAction
无法可靠地用于在容器控制器包含其他容器控制器的层次结构中查找目标控制器。
另外,我使用viewControllerForUnwindSegueAction:
向下钻取道路以找到目标控制器。
值得注意的是,它与iOS 8.0相关。 iOS 7.1可以非常快速地找到目标VC,甚至不需要标签栏。
- (UIViewController*)viewControllerForUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender {
for(UIViewController* vc in self.viewControllers) {
// check if controller itself handles unwinding
if([vc canPerformUnwindSegueAction:action fromViewController:fromViewController withSender:sender]) {
return vc;
}
// check if any child controller wants to handle this
UIViewController* childVC = [vc viewControllerForUnwindSegueAction:action fromViewController:fromViewController withSender:sender];
if(childVC) {
return childVC;
}
}
return [super viewControllerForUnwindSegueAction:action fromViewController:fromViewController withSender:sender];
}