【问题标题】:Delete current and presenting view controller in objective-c在objective-c中删除当前和呈现的视图控制器
【发布时间】:2020-07-19 21:01:21
【问题描述】:

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

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

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

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

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

这会关闭editVC,但不会关闭detail VC。

我还在删除时发送通知,tableview VC 和详细信息 VC 都观察到,并且两者的处理程序具有相似的解除代码。我都试过了:

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

但是细节视图仍然没有被关闭。

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

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

编辑:

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

根据 Apple 的文档,仅调用 dismissViewController 应该会关闭导航堆栈中的所有后续 VC,但这似乎并没有发生:

讨论

呈现视图控制器负责关闭视图 它呈现的控制器。如果您在呈现的视图上调用此方法 控制器本身,UIKit 要求呈现视图控制器处理 解雇。如果你连续呈现几个视图控制器, 因此构建了一堆呈现的视图控制器,调用它 堆栈中较低的视图控制器上的方法解除其立即 子视图控制器和该子视图之上的所有视图控制器 堆。发生这种情况时,只有最顶层的视图会在 动画时尚;任何中间视图控制器都被简单地删除 从堆栈中。最顶层的视图使用它的模态被关闭 过渡样式,可能与其他视图使用的样式不同 堆栈中较低的控制器。如果您想保留对 视图控制器呈现的视图控制器,获取值 调用此方法之前的presentedViewController 属性。这 在 viewDidDisappear: 方法之后调用完成处理程序 在呈现的视图控制器上调用。

【问题讨论】:

  • 您可以发布您的故事板。目前尚不清楚您是如何安排视图控制器层次结构的。
  • 请看上面的故事板

标签: ios objective-c presentviewcontroller dismissviewcontroller


【解决方案1】:

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

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

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

【讨论】:

  • 这是有道理的,但没有奏效。当我设置断点并查看 mainNavigation 时,它会显示详细视图的图片。但是,当我这样做时,它会显示 MainTab。 po parentViewController,给出一个 UINavigationController。 po Self 给 EditVC。 po Self.presentingViewController 还显示 MainTab。我应该提到第一个 TableViewVC 是主选项卡的一部分。将更新上面的图片
  • 是的。我也尝试了你能想到的每一种变化。我将您的代码放在编辑 VC 和通知触发的表 VC 中,它具有相同的效果。也颠倒了顺序,同样的效果。我已经尝试在完成块中展示所有可能的 ViewController、parentViewController 等。准备放弃,只在已删除的 detailVC 上显示已删除的标签。真的不明白为什么苹果会把这么简单的事情搞得这么复杂。
  • 刚刚意识到,另一个问题是我调用了从 alertViewController 中删除 EditVC 中的项目(并关闭 VC)的方法。也许 AlertVC 算作第一个 VC,我实际上需要连续删除三个。但是,我也试过调用dismissViewController,三四五次都无济于事。
猜你喜欢
  • 1970-01-01
  • 2017-07-09
  • 2015-02-27
  • 1970-01-01
  • 2016-02-11
  • 2014-06-30
  • 1970-01-01
  • 2017-04-09
  • 1970-01-01
相关资源
最近更新 更多