Метод UINavigationControllerDelegate willShow не вызывается - PullRequest
0 голосов
/ 11 июля 2020

В настоящее время я создаю приложение, которое использует UINavigationController для экранных переходов.

Проблема, с которой я столкнулся, заключалась в том, что строка печати в методе делегата willShow на экране B не будет отображаться. Переход от экрана A к B к A метод делегата willShow будет вызываться правильно, и даже если он отображается в консоли, переход от экрана A к B к C к B к A приведет к тому, что метод для него не будет вызывается и не будет отображаться.

ViewController.swift

// First view
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.title = "Home"
    }
}

SecondViewController.swift

class SecondViewController: UIViewController, UINavigationControllerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        navigationController?.delegate = self
        navigationItem.title = "Second"
    }

    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        if let _ = viewController as? SecondViewController {
            print("=====(open)willShow::SecondViewController=====")
        } else {
            print("=====(close)willShow::SecondViewController=====")
        }
    }
}

ThirdViewController.swift

class ThirdViewController: UIViewController, UINavigationControllerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        navigationController?.delegate = self
        navigationItem.title = "Third"
    }

    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        if let _ = viewController as? ThirdViewController {
            print("=====(open)willShow::ThirdViewController=====")
        } else {
            print("=====(close)willShow::ThirdViewController=====")
        }
    }
}

Журналы перехода от экрана A к B к A

=====(open)willShow::SecondViewController=====
=====(close)willShow::SecondViewController=====

Журналы перехода от экрана A к B к C к B к A

=====(open)willShow::SecondViewController=====
=====(open)willShow::ThirdViewController=====
=====(close)willShow::ThirdViewController=====

По логике вы должны увидеть это сообщение в конце.

=====(close)willShow::SecondViewController=====

FirstViewController

SecondViewController

ThirdViewController

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...