0

我有一个 tableview 控制器,一个详细的 VC。和一个允许删除项目的编辑详细信息 VC。Tableview 由一组项目提供。

删除该项目后,我不仅要关闭编辑 VC,还要关闭它下面的 detailVC(因为该项目不再存在),只留下更新的表格视图。

我可以通过通知成功更新表格视图,并且可以关闭编辑视图控制器。但是,我想不出在编辑 VC 消失后删除详细信息 VC 的方法。

到目前为止,在editVC中的服务器确认删除后,我有:

[self dismissViewControllerAnimated: NO completion:nil];
[self.presentingViewController dismissViewControllerAnimated: YES completion: nil];

这会取消 editVC 但不会取消 detail VC。

我还在 tableview VC 和 detail VC 观察到的删除时发送通知,并且两者的处理程序具有相似的解除代码。我已经尝试过每个:

[self dismissViewControllerAnimated: NO completion:nil];
[self.presentingViewController dismissViewControllerAnimated: YES completion: nil];

但是细节视图仍然没有被解雇。

值得注意的是,detail 是 Show(例如)推送,而 Edit 是嵌入在其自己的导航中的模态视图控制器。

故事板中的 VC。第一个导航是主故事板中 TabViewController 的一部分

编辑:

如果有任何区别,则从 AlertViewController 调用第三个(编辑)VC 中的删除方法。

从Apple的文档中,仅调用dismissViewController就应该关闭导航堆栈中所有以后的VC,但这似乎没有发生:

讨论

呈现视图控制器负责关闭它呈现的视图控制器。如果您在呈现的视图控制器本身上调用此方法,UIKit 会要求呈现的视图控制器处理解除。如果您连续呈现多个视图控制器,从而构建一个呈现视图控制器的堆栈,则在堆栈中较低的视图控制器上调用此方法会解除其直接子视图控制器以及堆栈上该子视图控制器上方的所有视图控制器。发生这种情况时,只有最顶层的视图会以动画方式消失;任何中间视图控制器都简单地从堆栈中删除。最顶层的视图使用其模态转换样式被解除,这可能与堆栈中其他视图控制器使用的样式不同。如果要保留对视图控制器的呈现视图控制器的引用,请在调用此方法之前获取 presentViewController 属性中的值。在显示的视图控制器上调用 viewDidDisappear: 方法之后调用完成处理程序。

在此处输入图像描述

4

1 回答 1

0

您正在展示来自 DetailVC 的导航控制器。这就是你的代码不起作用的原因。您可以使用以下代码从 EditVC 返回 tableview scree。

UINavigationController *mainNavigation = (UINavigationController *) self.navigationController.presentingViewController;
[self dismissViewControllerAnimated:YES completion:^{
    [mainNavigation popViewControllerAnimated:YES];
}];

将上面的代码放在 EditVC 中,这样就可以了。

于 2020-04-08T03:45:13.570 回答