注意:
我没有使用UINavigationController
。
我有一个名为UIViewController
的ContainerViewController
,它具有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/