2017-06-17 2 views
0

J'ai un projet de test simple avec un UINavigationController comme mon .rootViewController. Je pousse le premier ViewController qui a un bouton + comme bouton de droite, je m'inscris à ses taps pour présenter un nouveau ViewController (identique au précédent). Le segue push fonctionne comme je l'espère.Abonnez-vous à UINavigationController bouton de retour avec RxSwift/RxCocoa

UIKit gère le bouton de retour pour moi et je pense que c'est UINavigationController qui fait la magie derrière la scène. Maintenant, ce que je dois faire est de m'abonner au bouton de retour, mais je ne peux pas trouver comment faire ceci. J'ai essayé avec 1) navigationController.navigationBar.backItem? .backBarButtonItem? .rx.tap 2) navigationController.navigationItem.backBarButtonItem? .rx.tap , mais ils semblent être nul, de sorte que le chaînage en option empêche l'abonnement.

Merci pour votre aide, Luca-

+0

Le contrôleur de vue actuel sera retiré de la pile du contrôleur de navigation et le contrôleur de vue précédent deviendra le nouveau contrôleur de vue actuel. Si vous avez besoin de ce nouveau contrôleur de vue pour faire quelque chose après qu'il soit de retour, vous devriez mettre ce code dans sa méthode 'viewWillAppear (animated:)', qui est appelée chaque fois qu'un contrôleur de vue devient le plus haut sur un contrôleur de nav ou est présenté de manière modale. – NRitH

+0

Merci NRitH pour vos suggestions. J'explore comment la navigation de ViewController fonctionne avec RxSwift/RxCocoa. J'aimerais avoir un coordinateur qui instancie ViewControllers et ViewModels. Je pense que la navigation devrait être orchestrée par ces objets Coordinateur et pour cela ils doivent savoir quand l'utilisateur appuie sur le bouton de retour. Quoi qu'il en soit, c'est assez confus dans mon esprit, mais viewController.rx.sentMessage (#selector (UIViewController.viewWillDisappear (_ :))) fonctionne comme vous l'avez suggéré. – Luca

Répondre

1

Je pense que votre meilleur pari est d'utiliser l'opérateur sur UINavigationController.

navigationController.rx.willShow se déclenchera chaque fois qu'un contrôleur de vue est sur le point d'être affiché. Vous pouvez faire un nettoyage de dernière minute quand il se déclenche. Pourquoi avez-vous besoin de vous abonner au bouton de retour?

+0

UINavigationController ne semble pas avoir d'observable rx.willShow. Est-ce que je manque quelque chose? Dois-je utiliser un #selector? – Luca

+0

Peut-être que vous avez besoin de mettre à niveau vers la dernière version de RxCocoa? C'est là (https://github.com/ReactiveX/RxSwift/blob/master/RxCocoa/iOS/UINavigationController%2BRx.swift) –

+0

Merci, j'étais sur 3.4 – Luca