Представление не отображается с "setViewController" в UIPageViewController в Swift - PullRequest
0 голосов
/ 19 февраля 2019

Я хотел бы изменить страницы, отображаемые моим UIPageView программно.

Я создал два ViewController, которые должны отображаться в PageView, и я установил начальный вид с помощью "setViewControllers" в моем viewDidLoad.Я работаю, вид отображается, и я могу провести по экрану, чтобы переключиться между двумя видами.

Моя проблема в том, что, когда я пытаюсь снова вызвать "setViewControllers", чтобы изменить отображаемый вид, когда я нажимаю кнопку, ничего не происходит.

Я использую делегаты, так как кнопки являются частью другого ViewController, и использовал NSLog, чтобы убедиться, что функции были вызваны, что имеет место.

Если кто-то может помочьЯ понимаю, почему метод setViewControllers ничего не делает, это было бы здорово.

Вот мой код для моего UIPageViewController :

import UIKit

class FrontContentController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate, sideMenuDelegate {

    func presentationCount(for pageViewController: UIPageViewController) -> Int {
        return subViewControllers.count
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        let currentIndex:Int = subViewControllers.index(of: viewController) ?? 0
        if currentIndex <= 0 {
            return nil
        }
        return subViewControllers[currentIndex - 1]
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        let currentIndex:Int = subViewControllers.index(of: viewController) ?? 0
        if currentIndex >= subViewControllers.count - 1 {
            return nil
        }
        return subViewControllers[currentIndex + 1]
    }

    lazy var subViewControllers:[UIViewController] = {
        return [
            UIStoryboard(name: "frontPage", bundle: nil).instantiateViewController(withIdentifier: "FirstContent") as! FirstContentController,
            UIStoryboard(name: "frontPage", bundle: nil).instantiateViewController(withIdentifier: "SecondContent") as! SecondContentController
        ]
    }()

    var sideMenuVC : SideMenuController!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
        self.dataSource = self
        self.sideMenuVC = (self.storyboard?.instantiateViewController(withIdentifier: "SideMenu") as! SideMenuController)
        self.setViewControllers([subViewControllers[0]], direction: .forward, animated: true, completion: nil)
        // Do any additional setup after loading the view.
    }

    func changeColor(_ color: UIColor) {
        if color == .blue {
            self.setViewControllers([subViewControllers[0]], direction: .forward, animated: false, completion: nil)
            NSLog("Blue Delegate")
        }
        if color == .red {
            self.setViewControllers([subViewControllers[1]], direction: .forward, animated: false, completion: nil)
            NSLog("Red Delegate")
        }
    }
}

И вв случае необходимости, отдельный UIViewController с кнопками (боковое меню):

import UIKit

protocol sideMenuDelegate: AnyObject {
    func changeColor(_ color : UIColor)
}

class SideMenuController: UIViewController {

    weak var delegate : sideMenuDelegate?
    var frontPageVC : FrontPageController!
    var frontContentPC : FrontContentController!

    override func viewDidLoad() {
        super.viewDidLoad()
        let storyboard = UIStoryboard(name: "frontPage", bundle: nil)
        frontPageVC = (storyboard.instantiateViewController(withIdentifier: "FrontPage") as! FrontPageController)
        frontContentPC = (storyboard.instantiateViewController(withIdentifier: "FrontContent") as! FrontContentController)
        self.delegate = frontContentPC
        self.view.backgroundColor = UIColor.black
    }

    @IBAction func pressBlueButton(_ sender: Any) {
        delegate?.changeColor(UIColor .blue)
    }
    @IBAction func pressRedButton(_ sender: Any) {
        delegate?.changeColor(UIColor .red)
    }
}

Спасибо

...