注意:


我没有使用UINavigationController
我有一个名为UIViewControllerContainerViewController,它具有3个子视图控制器,其行为与UIPageViewController类似,但它不是UIPageViewController,而是包含分页UIScrollView。然后,每个子视图控制器都可以模态地实例化其他视图控制器。


我想从后台回来时刷新视图控制器。但是,只有当您从后台返回时,该视图控制器是可见的控制器(意味着最顶部且处于活动状态),才应该发生这种情况。

问题是:如何确定视图控制器是否是可见的(最顶部并且现在在屏幕上处于活动状态)?

如果我使用此问题的答案:
Get top most UIViewController

extension UIApplication {
    class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        if let navigationController = controller as? UINavigationController {
            return topViewController(controller: navigationController.visibleViewController)
        }
        if let tabController = controller as? UITabBarController {
            if let selected = tabController.selectedViewController {
                return topViewController(controller: selected)
            }
        }
        if let presented = controller?.presentedViewController {
            return topViewController(controller: presented)
        }
        return controller
    }
}


这可行。但是,如果我将应用程序留在ContainerViewController的子视图控制器中,则此扩展名只会返回ContainerViewController->而不是子视图控制器。

有什么想法吗?

最佳答案

您知道您将需要此信息,因此这只是预先计划的问题。每次在滚动视图中切换页面时,请使用您对子视图控制器和页面的了解,以在容器视图控制器的属性中记录现在显示的视图控制器的视图。现在,您的例行工作就是咨询该属性。

关于ios - 在分页UIScrollView中获取可见的 View Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43691430/

10-11 14:43