Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在分页UIScrollView中获取可见视图控制器_Ios_Swift_Uiviewcontroller_Uiscrollview - Fatal编程技术网

Ios 在分页UIScrollView中获取可见视图控制器

Ios 在分页UIScrollView中获取可见视图控制器,ios,swift,uiviewcontroller,uiscrollview,Ios,Swift,Uiviewcontroller,Uiscrollview,注: 我没有使用UINavigationController 我有一个名为ContainerViewController的UIViewController,它有3个子视图控制器,其行为类似于UIPageViewController,但它不是UIPageViewController,而是包含一个分页UIScrollView。然后,每个子视图控制器能够以模态方式实例化其他视图控制器的 我想在从后台返回时刷新视图控制器。但是,只有当您从后台返回时,该视图控制器才是可见的(表示最顶层且处于活动状态)

注:

  • 我没有使用
    UINavigationController
  • 我有一个名为
    ContainerViewController
    UIViewController
    ,它有3个子视图控制器,其行为类似于
    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
    }
}