【问题标题】:In UINavigationController what is the difference between topViewController, visibleViewController, presentedViewController?在 UINavigationController 中,topViewController、visibleViewController、presentViewController 有什么区别?
【发布时间】:2016-01-28 11:41:09
【问题描述】:

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

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

【问题讨论】:

    标签: ios objective-c swift uiviewcontroller uinavigationcontroller


    【解决方案1】:
    • topViewController - 最后一个视图控制器使用 UINavigationController 的 pushViewController(_:animated:) 方法推送到 UINavigationController。将以前的控制器推开并替换它。
    • presentedViewController - 呈现在另一个之上的视图控制器(基本上它覆盖了另一个视图控制器,而不是将其推开)。代替 UINavigationController's pushViewController(_:animated:) 你使用 UIViewController's present(_:animated:completion:) 方法。 注意:呈现的视图控制器也称为模态视图控制器,可以在没有 UINavigationController 的情况下使用。
    • visibleViewController 可以与 topViewController 或 presentViewController 相同。如果您最后推送到 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 AND visibleViewController。 (没有提供的ViewController。)
    8. 弹出 viewA
    9. viewA 不再是 visibleViewController 或 topViewController。

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

    【讨论】:

    • 其他答案有一些很好的见解,我想我会添加自发布此问题以来学到的知识,以防它对任何人有所帮助。
    【解决方案2】:

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

    【讨论】:

    • 它们听起来都和我很相似。请提供更多信息。
    【解决方案3】:
    • TopViewController 是导航堆栈中最顶层的 VC。或最后推送的视图控制器。

    • PresentedViewController 是从 navigationController 模态呈现的 viewController。它不是 NaivagationController 水平堆栈的一部分,而是呈现在它上面的 viewController。

    • 在这两个viewController中,对用户可见的是navigationController的visibleViewController。

    【讨论】:

      猜你喜欢
      • 2012-12-23
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 2016-12-01
      相关资源
      最近更新 更多