首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在swift中重置/重新加载UI页面控制器视图

如何在swift中重置/重新加载UI页面控制器视图
EN

Stack Overflow用户
提问于 2018-07-23 01:31:30
回答 1查看 1.1K关注 0票数 0

我正在研究如何重新加载UI页面控制器。在一个桌面VC上,我添加了UIHeaderView并嵌入了UIPage VC。页面VC正在从firebase动态加载图像。第一次是加载正确的图像集,但是当我在表VC上选择其他单元时,页面VC需要刷新它的数据。如何实现此功能这里是我为页面VC编写的coed

代码语言:javascript
复制
//-----PAGE VC CODE------
import UIKit
import Firebase

protocol ProductImagesPageVCDelegate: class
{
    func setupPageController(numberOfPages: Int)
    func turnPageController(to index: Int)
}

class ProductImagesPageVC: UIPageViewController {

    var product: Product!

    weak var pageViewControllerDelegate: ProductImagesPageVCDelegate?

    struct StoryBoard {
        static let productImageVC = "ProductImageVC"
    }

    lazy var controllers: [UIViewController] = {

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        var controllers = [UIViewController]()

        if let imageLinks = self.product.imageLinks
        {
            for imageLink in imageLinks
            {
                let productImageVC = storyboard.instantiateViewController(withIdentifier: StoryBoard.productImageVC)
                controllers.append(productImageVC)
            }
        }

        self.pageViewControllerDelegate?.setupPageController(numberOfPages: controllers.count)

        return controllers
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

//        if #available(iOS 11.0, *) {
//            contentInsetAdjustmentBehavior = .never
//        } else {
//            automaticallyAdjustsScrollViewInsets = false
//        }
        automaticallyAdjustsScrollViewInsets = false
        dataSource = self
        delegate = self

        self.turnToPage(index: 0)


    }


    func turnToPage(index: Int)
    {
        let controller = controllers[index]
        var direction = UIPageViewControllerNavigationDirection.forward

        if let currentVC = viewControllers?.first
        {
            guard let currentIndex = controllers.index(of: currentVC) else {return}
            if currentIndex > index
            {
                direction = .reverse
            }
        }

        self.configuewDisplaying(viewController: controller)

        setViewControllers([controller], direction: direction, animated: true, completion: nil)

    }

    func configuewDisplaying(viewController: UIViewController)
    {
        for (index, vc) in controllers.enumerated()
        {
            if viewController === vc {
                if let productImageVC = viewController as? ProductImageVC
                {
                    productImageVC.imageLink = self.product.imageLinks?[index]

                    self.pageViewControllerDelegate?.turnPageController(to: index)
                }
            }
        }
    }


}

extension ProductImagesPageVC: UIPageViewControllerDataSource
{
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {

        if let index = controllers.index(of: viewController)
        {
            if index < controllers.count - 1
            {
                return controllers[index + 1]
            }
        }


        return controllers.first
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {

        if let index = controllers.index(of: viewController)
        {
            if index > 0
            {
                return controllers[index - 1]
            }
        }

        return controllers.last
    }
}

extension ProductImagesPageVC: UIPageViewControllerDelegate
{

    func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {

        self.configuewDisplaying(viewController: pendingViewControllers.first as! ProductImageVC)
    }

    func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {

        if !completed
        {
            self.configuewDisplaying(viewController: previousViewControllers.first as! ProductImageVC)
        }
    }



}
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51467632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档