【问题标题】:Get visible view controller in paging UIScrollView在分页 UIScrollView 中获取可见的视图控制器
【发布时间】:2017-09-27 05:38:21
【问题描述】:

注意:

  • 我没有使用UINavigationController
  • 我有一个名为ContainerViewControllerUIViewController,它有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 swift uiviewcontroller uiscrollview


    【解决方案1】:

    您知道您将需要这些信息,因此只需提前计划即可。每次在滚动视图中切换页面时,利用您对子视图控制器和页面的了解,在容器视图控制器的属性中记录视图控制器的视图现在显示的内容。现在,您所要做的就是查询该属性。

    【讨论】:

    • hm 很有趣,所以在ContainerViewController 中我可以有一个名为currentVisibleVC 的属性,但是你会在哪里更新这个属性-> 你会使用UIScrollView 委托方法(不确定是哪一个最好)?
    • 这当然是我的想法,是的。您始终可以通过委托知道用户滚动到的位置。
    • 不过,我忍不住要评论说,如果您使用了 UIPageViewController,这一切都会变得简单得多。
    • 当然谢谢!我们做了分页滚动视图的某些限制。既然您是专家,您对使用UIScrollView 中的哪个委托方法来更新该属性有何看法?似乎在这里使用的冲突:stackoverflow.com/questions/5272228/…
    • 我实际上有一些示例代码,向您展示如何计算用户已分页到分页滚动视图的哪个页面:github.com/mattneub/Programming-iOS-Book-Examples/blob/master/… 它在将滚动视图绑定到页面的上下文中执行此操作控制,实际上你可能想在你的应用中做一些事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2011-07-24
    • 1970-01-01
    • 2012-12-02
    相关资源
    最近更新 更多