setViewControllers не работает - PullRequest
       23

setViewControllers не работает

0 голосов
/ 24 апреля 2018

Я пытаюсь изменить текущий ViewController моего UIPageViewController с помощью кнопки NEXT. Поэтому я вызываю функцию, которая находится в моем containerterViewController в моем mainViewController, используя делегата. Но он не выполняет строку setViewControllers.

Здесь вы можете увидеть мой код:

Это метод, который я вызываю с использованием моего делегата:

func forwardPage() {
    print("Start")
    currentPage += 1
    print(vcs[currentPage])
    self.setViewControllers([vcs[currentPage]], direction: .forward, animated: true) { (true) in
        print("Done")
    }
}

Вот мой делегат:

protocol WalkthroughViewControllerDelegate {
   func forwardPage()
   func currentIndex() -> Int
}

А вот функция, которая связана с моей следующей кнопкой:

@IBAction func nextButtonTapped(_ sender: Any) {
    if let index = delegate?.currentIndex() {
        print("Here... \(index)")
        switch index {
        case 0...1:
            print("Forwarding...")
            delegate?.forwardPage()
        case 2:
            dismiss(animated: true, completion: nil)
        default: break
        }
    }

    updateUI()
}

Все, кроме "Готово" печатается

Буду очень признателен за вашу помощь

Я боролся из-за этого уже довольно давно

Большое спасибо:)

EDIT: возможно, это происходит потому, что UIPageViewController находится внутри контейнера. Но я не уверен

ВТОРОЕ РЕДАКТИРОВАНИЕ: Я создал хранилище git-hub только для этой проблемы. Вот ссылка: https://github.com/LennartPhil/App-Popup-Screen. Я надеюсь, вы понимаете, что я не покажу вам все мои файлы.

1 Ответ

0 голосов
/ 02 мая 2018

ОК - проблема в том, что ваш код в viewDidLoad():

    let storyboard = UIStoryboard(name: "ExtraViewControllers", bundle: nil)
    let walkthroughPageVC = storyboard.instantiateViewController(withIdentifier: "WalkthroughPageVC") as! WalkthroughPageViewController
    delegate = walkthroughPageVC

создает НОВЫЙ экземпляр WalkthroughPageViewController, который выходит из области видимости, как только выходит viewDidLoad(). Так что его больше не существует.

Вместо этого вам нужно получить ссылку на него в prepare(for segue:...) и установить его в качестве своего делегата:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let vc = segue.destination as? WalkthroughPageViewController {
        self.delegate = vc
    }
}

Я создал ваш репозиторий GitHub и добавил файлы в проект, чтобы вы могли увидеть, как он запускается: https://github.com/DonMag/App-Popup-Screen

...