我了解 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/