注意:
- 我没有使用
UINavigationController
. - 我有一个名为
ContainerViewController
的UIViewController
,它有 3 个类似于UIPageViewController
的子视图控制器,但它不是UIPageViewController
,而是包含一个分页UIScrollView
。然后,每个子视图控制器都能够以模式实例化其他视图控制器。
我想在从后台返回时刷新视图控制器。但是,仅当您从后台返回时,该视图控制器是可见的(意味着最顶部和活动状态)时,才会发生这种情况。
问题是:如何确定视图控制器是否是可见的(现在在屏幕上最顶部和活动状态)?
如果我使用这个问题的答案: 获取最顶级的UIView控制器
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
->而不是子视图控制器。
有什么想法吗?
你知道你需要这些信息,所以这只是提前计划的问题。每次在滚动视图中切换页面时,请使用您对子视图控制器的了解,以及在容器视图控制器的属性中记录视图控制器视图现在显示的页面。现在,您的日常工作所要做的就是咨询该属性。