Ios 在分页UIScrollView中获取可见视图控制器
注:Ios 在分页UIScrollView中获取可见视图控制器,ios,swift,uiviewcontroller,uiscrollview,Ios,Swift,Uiviewcontroller,Uiscrollview,注: 我没有使用UINavigationController 我有一个名为ContainerViewController的UIViewController,它有3个子视图控制器,其行为类似于UIPageViewController,但它不是UIPageViewController,而是包含一个分页UIScrollView。然后,每个子视图控制器能够以模态方式实例化其他视图控制器的 我想在从后台返回时刷新视图控制器。但是,只有当您从后台返回时,该视图控制器才是可见的(表示最顶层且处于活动状态)
- 我没有使用
UINavigationController
- 我有一个名为
的ContainerViewController
,它有3个子视图控制器,其行为类似于UIViewController
,但它不是UIPageViewController
,而是包含一个分页UIPageViewController
。然后,每个子视图控制器能够以模态方式实例化其他视图控制器的UIScrollView
ContainerViewController
的子视图控制器中,则此扩展只返回ContainerViewController
->而不是子视图控制器
有什么想法吗?你知道你需要这些信息,所以这只是一个提前计划的问题。每次在滚动视图中切换页面时,请使用您对子视图控制器和页面的了解,在容器视图控制器的属性中记录当前显示的视图控制器的视图。现在,您的例程所要做的就是查询该属性。hm有趣,因此在
ContainerViewController
中,我可以有一个名为currentVisibleVC
的属性,但您在哪里更新该属性->您会使用UIScrollView
委托方法(不确定哪一种方法最好)这当然是我的想法,是的。通过代理,您总是知道用户滚动到的位置。但是,我忍不住要评论,如果您使用UIPageViewController,所有这些都会简单得多。当然,谢谢!由于某些限制,我们没有这样做。由于您是专家,您对从UIScrollView
使用哪个委托方法来更新该属性有什么看法?这里似乎存在使用冲突:我实际上有一些示例代码,向您展示了如何计算用户已将页面转到页面滚动视图的哪个页面:它在将滚动视图绑定到页面控件的上下文中执行此操作,实际上,您可能希望在应用程序中执行此操作。
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
}
}