Как я могу загрузить self.navigationController перед вызовом `viewDidLoad` - PullRequest
0 голосов
/ 07 июня 2018

Я хочу кое-что сделать до того, как контроллер представления вызовет viewDidLoad .Я вызываю loadViewIfNeeded () , но self.navigationController по-прежнему равен нулю.Как я могу загрузить его?

AppDelegate.swift

func someMethod() {
    var viewController = Storyboard.instantiate()
    let viewModel = SomeViewModel()
    vc.bind(to: viewModel)
}

BindableType.swift

protocol BindableType {
    associatedtype ViewModelType

    var viewModel: ViewModelType! { get set }

    func bindViewModel()
}

extension BindableType where Self: UIViewController {
    mutating func bind(to model: Self.ViewModelType) {
        viewModel = model
        loadViewIfNeeded()

        // PROBLEM HERE: navigationController is nil, but view have been loaded
        navigationController?.navigationBar.prefersLargeTitles = true
        navigationController?.navigationItem.largeTitleDisplayMode = .automatic

        bindViewModel()
    }
}

SomeViewController.swift

class SomeViewController: BindableType {

    override func viewDidLoad() {
        super.viewDidLoad()

        // navigationController?.navigationBar.prefersLargeTitles = true
        // navigationController?.navigationItem.largeTitleDisplayMode = .automatic
    }

    func bindViewModel() {
        ...
    }
}

1 Ответ

0 голосов
/ 07 июня 2018

Я нашел проблему.Я должен поставить строку с нажатием контроллера выше viewController.bind (to: viewModel)

self.navigationViewController.pushViewController(viewController, animated: true)
viewController.bind(to: viewModel)
...