ios - 错误编程的后果 : dismissViewController vs popViewController

标签 ios cocoa-touch uiviewcontroller navigationcontroller

我了解 dismissViewControllerAnimated:completion:popViewControllerAnimated: 之间的区别,如 on Stack Overflow 所述在这里:

-dismissViewControllerAnimated:completion: method is used to dismiss an UIViewController, which was presented by the method: -presentViewController:animated:completion:.

-popViewControllerAnimated: method of UINavigationController is used to pop a controller shown by -pushViewController:animated method of UINavigationController.

我最近在我的应用程序中发现了一个错误,我在其中使用 [self dismissViewControllerAnimated:completion:] 关闭导航嵌入式应用程序中通过推送呈现的 VC。当我应该吃披萨时,我炸了。我没有发现错误,因为一切正常,我的 VC 已按预期解除分配。

我的问题:将这两种方法混合使用会产生什么后果?

最佳答案

-presentViewController:animated:completion:-pushViewController:animated: 意思不同。前者说“呈现这个另一个 View Controller 以取代你自己”。后者表示“在您内部显示这个其他 View Controller ,作为您控制的列表的一部分”。

所以这是关于谁被认为负责过渡后的显示。在前一种情况下,导航 Controller 交出控制权。在后者中,它保留控制权。

前一个功能由 UIViewController 提供。后者特定于 UINavigationController

因为两个 Action 截然不同,所以相反的 Action 是分开的。导航 Controller 可以捕获 dismissViewController:... 并检查命名 Controller 的呈现方式,分支到父类(super class)或 pop... 但任务的合并将是从设计和维护的角度来看没有吸引力。

由于导航 Controller 不 promise 将一件事映射到另一件事,并且 UIViewController 不 promise 如果您传递的 Controller 之前没有出现任何特定行为,我认为您问题的字面答案是:将这两件事混合在一起的结果是未定义的行为。

关于ios - 错误编程的后果 : dismissViewController vs popViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19668328/

相关文章:

ios - 如何在不同的 ViewController 中使用 JSONModel 数据?

objective-c - 带有自定义 View Controller 的 iOS 5 页面 curl

ios - 如何使用iOS在sqlite中存储双引号

ios - 快速对齐标签

ios - UIStoryboard 扩展

iphone - 在 UIScrollView 中缩放 UIImageView 越界

objective-c - 应用内购买取消自动续订的通知

objective-c - UIButton setImage 未从非触摸操作更新

iOS 从 View Controller 关闭 popovercontroller

iOS:隐藏 MapView 但保留覆盖图像?