ios - 在 UINavigationController 中,topViewController、visibleViewController、presentedViewController 之间有什么区别?

标签 ios objective-c swift uiviewcontroller uinavigationcontroller

UINavigationController 有 3 个 Controller ,听起来都与我非常相似:topViewControllervisibleViewControllerpresentedViewController

您在哪些场景中使用这些 Controller ?

最佳答案

  • topViewController - 最后一个 View Controller 使用 UINavigationController 的 pushViewController(_:animated:) 方法推送到 UINavigationController。将之前的 Controller 推开并替换它。
  • presentedViewController - 显示在另一个 View Controller 之上的 View Controller (基本上它覆盖了另一个 View Controller 而不是将其推开)。代替 UINavigationController 的 pushViewController(_:animated:) 你使用 UIViewController 的 present(_:animated:completion:)方法。 注意:呈现的 View Controller 也称为模态视图 Controller ,可以在没有 UINavigationController 的情况下使用。
  • visibleViewController 可以与 topViewController 或 presentedViewController 相同。如果你最后推到 UINavigationController 上,它将与 topViewController 相同。如果您最后在 UIViewController 上呈现,它将与 presentedViewController 相同。

示例:

  1. 将 UIViewController viewA 推送到 UINavigationController。
  2. viewA 在其自身上呈现 UIViewController viewB
  3. viewA 是 topViewController。
  4. viewB 呈现在 ViewController 中。
  5. viewB 也是 visibleViewController。
  6. 关闭模态 viewB
  7. viewA 现在是 topViewController 和 visibleViewController。 (没有 presentedViewController。)
  8. 弹出 viewA
  9. viewA 不再是 visibleViewController 或 topViewController。

总的来说,visibleViewController 似乎更有用,因为它会告诉您当前正在显示的 View ,无论它是被推送还是呈现。

关于ios - 在 UINavigationController 中,topViewController、visibleViewController、presentedViewController 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33395463/

相关文章:

ios - 在 AnimationDidStop 中检索 CAKeyframeAnimationKey 的键

android - 即使不在同一网络中,我们也可以从 Android 设备连接到 iPhone 吗?

ios - 如何在Ios中获取视频的Instagram Media_ID?

iphone - 将动态 UIWebView 设置为 TableView 中的标题

ios - 在 Swift 中使用 PageViewController 设置 NSTimer

ios - 无法使用 Int 类型的索引下标字典类型的值

ios - NSMutableAttributedString paragraphStyle 不适用

ios - 如何在 iOS 上调整 OpenGL ES 渲染缓冲区的大小?

ios - 谷歌分析 ios sdk V2.0 短 session 持续时间

ios - EXC_BAD_ACCESS 尝试返回 uint64_t 数字时