Передача данных через контроллеры не работает должным образом - PullRequest
0 голосов
/ 20 июня 2019

Может кто-нибудь сказать мне, почему мой код не работает, как я ожидаю? Я хочу передать значение из ViewController в контроллер FVC. Я думаю, что проблема с контроллером страницы («ТЕСТ»).

Вот СС моей раскадровки: enter image description here

А вот и мой код

class ViewController: UIViewController {
var a = "abcdefg"
var test : TEST!
override func viewDidLoad() {
    super.viewDidLoad()
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "first" {
        if segue.destination.isKind(of: TEST.self) {
            test = segue.destination as! TEST
            test.b = a
        }
    }
}


}

И код для PageController


    var b = ""
    lazy var subViewControllers:[UIViewController] = {
        return [
            UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "FVC") as! FVC,UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SVC") as! SVC,UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "TVC") as! TVC
        ]
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        dataSource = self
        delegate = self
        setViewControllerFromIndex(index: 0)
    }

    func setViewControllerFromIndex(index:Int) {
        self.setViewControllers([subViewControllers[index]], direction: UIPageViewController.NavigationDirection.forward, animated: true, completion: nil)
    }
    }

extension TEST: UIPageViewControllerDelegate, UIPageViewControllerDataSource {
    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]
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "FVC" {
            let vc = segue.destination as? FVC
            vc?.g = b
        }
    }
```}


And third  Controller 

``` class FVC: UIViewController {

    var g = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        test()
    }

    func test(){
        var s = "aaaaa"  + g
        print(s)

   }

И как результат это должно быть "aaaaaabcdefg", но это "aaaaa". Буду признателен, если кто-нибудь подскажет, как передать данные с использованием такого сценария.

...