iOS swift UIPageViewController с контейнером - PullRequest
0 голосов
/ 24 сентября 2018

У меня странное поведение с UIPageViewController.Шаги:

  1. Контроллер открытого представления
  2. Нажмите на кнопку камеры
  3. Выберите изображение
  4. При возврате обратно включенный контроллер представления в дубль ContainerViewвсе место в View Controller

Вот мой код:

enter image description here enter image description here

enter image description here enter image description here

 class ContainerPagerViewController: BaseUIViewController {

    // The UIPageViewController
    var pageContainer: UIPageViewController!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Create the page container
        pageContainer = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)

        // Add it to the view
        view.addSubview(pageContainer.view)
    }


}

class RPViewController: BaseUIViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource {

    var containerViewController: ContainerPagerViewController?

    // Track the current index
    var currentIndex: Int?
    private var pendingIndex: Int?  

    private(set) lazy var pages: [UIViewController] = {
        return [self.addViewController(identifier: "ViewController1"),
            self.addViewController(identifier: "ViewController2"),
            self.addViewController(identifier: "ViewController3"),
            self.addViewController(identifier: "ViewController4"),
            self.addViewController(identifier: "ViewController5"),
            self.addViewController(identifier: "ViewController6")]
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        currentIndex = 0

        containerViewController?.pageContainer.delegate = self
        containerViewController?.pageContainer.dataSource = self
  }

  private func addViewController(identifier: String) -> UIViewController {
        return UIStoryboard(name: "Main", bundle: nil) .
            instantiateViewController(withIdentifier: identifier) as! UIViewController
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "containerSegue" {
            containerViewController = segue.destination as? ContainerPagerViewController
        }
    }

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

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
       return nil
    }

    func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
        pendingIndex = pages.index(of: pendingViewControllers.first! as! UIViewController)
    }

    func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
            if completed {
                currentIndex = pendingIndex
            }
        }
    }

}
...