繁体   English   中英

所有呈现的视图控制器都不会被解雇

[英]All the presented view controllers are not dismissed

我有一个显示的firstViewController

[self.navigationController pushViewController:firstViewController animated:true];

然后当点击第一个VC中的按钮时,我会出现第二个:

[self presentViewController:secondViewController animated:true completion:nil];

从第二个开始,我将第三个VC作为一个模态:

[thirdVC modalPresentationStyle];
[thirdVC setModalPresentationStyle:UIModalPresentationOverCurrentContext];    
[self presentViewController:thirdVC animated:true completion:nil];

问题是我想在单击最后一个VC的验证按钮时显示firstVC。 所以我不得不解雇第三个和第二个。 我在validateAction尝试了这个(在第三个VC中):

[[self parentViewController] dismissViewControllerAnimated:true completion:nil];
[self dismissViewControllerAnimated:true completion:nil];

但结果是第三个VC(模态一个)被解除了,从调试器我可以看到第一个VC被第二个VC覆盖。

如何同时解除第二个和第三个VC才能返回第一个VC? 注意:我想在解除其他人之后推送第一个VC,因为我必须重新加载数据(在fristVC viewDidLoad中)

来自Apple的文档

呈现视图控制器负责解除它所呈现的视图控制器。 如果在呈现的视图控制器本身上调用此方法,UIKit会要求呈现视图控制器处理解雇。

换句话说,第三个viewController要求第二个viewController关闭它呈现的viewController,这是第三个。 然后第三个viewController尝试解散自己,导致UIKit再次请求第二个viewController解除第三个。

你将不得不去一层并要求第一个viewController解雇它呈现的视图控制器。

优秀的做法是第三个viewController对表示层次结构一无所知。 您可以使用委托告诉第一个viewController任务已完成。 如果您使用故事板,退出segue是一个非常好的选择。

你只需要调用-dismissViewControllerAnimated:completion:如果你解决了第一个viewController:

如果连续呈现多个视图控制器,从而构建一堆呈现的视图控制器,则在堆栈中较低的视图控制器上调用此方法会解除其直接子视图控制器以及堆栈上该子视图上方的所有视图控制器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM