在UINavigationController中,topViewController,visibleViewController,presentsViewController有什么区别?

Ten*_*Jay 20 objective-c uiviewcontroller uinavigationcontroller ios swift

UINavigationController有3个控制器,所有的声音非常相似的对我说:topViewController,visibleViewController,和presentedViewController.

您在哪些场景中使用这些控制器?

Ten*_*Jay 20

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

例:

  1. 将UIViewController viewA推送到UINavigationController.
  2. 有一个viewA呈现UIViewController viewB本身.
  3. viewA是topViewController.
  4. viewBpresentsViewController.
  5. viewB也是visibleViewController.
  6. 解雇模态viewB.
  7. viewA现在是topViewController和visibleViewController.(没有presentViewController.)
  8. 流行viewA.
  9. viewA不再是visibleViewController或topViewController.

一般来说,似乎visibleViewController更有用,因为它会告诉你当前显示的是什么视图,无论它是被推送还是呈现.


Ceh*_*ehm 8

presentedViewController是屏幕上显示的当前模式. topViewController是导航堆栈顶部的视图控制器(参见viewControllers()方法),visibleViewController是屏幕上当前显示的视图控制器(可以是控制器,模态,a UINavigationController,a UITabbarController等).

  • 它们听起来和我很相似.请更多信息. (5认同)