2017-09-20 4 views
0

Lorsque l'utilisateur tape sur un bouton I afficher un écran de sélection. Le résultat est transmis dans mon modèle de vue. Le code ressemble à ceci:RxSwift - Appuyez sur Rejoué Events

locationButton.rx.tap 
      .flatMapLatest(wireframe.displayPlaceSelection) 
      .filterNil() 
      .map(DiscoverLocationSelection.location) 
      .subscribe(onNext: viewModel.updateLocation(with:)) 
      .disposed(by: disposeBag) 

Ce code fonctionne très bien, et l'utilisateur peut choisir un emplacement et sera retourné à cet écran avec le bouton.

Si l'utilisateur appuie à nouveau sur le bouton une deuxième fois, la fonction displayPlaceSelection() est appelée deux fois. Si l'utilisateur devait le faire une troisième fois, la fonction sera appelée 3 fois. Cela entraîne plusieurs contrôleurs de vue étant poussés les uns sur les autres.

Comment puis-je arrêter ces événements de empiler?

L'effet est ceci:

RxSwift Tap Replay

+0

Je peux supposer que ce code (s'abonner) est appelé à chaque fois que vous ouvrez ce vc et que vous avez donc de nombreux abonnés à l'événement tap. Où est ce code? 'viewDidLoad' ou' viewWillAppear' par exemple. –

+0

Vous avez entièrement raison! Merci beaucoup. S'il vous plaît poster ce commentaire comme une réponse et je vais l'accepter. –

Répondre

1

Je suppose que ce code (subscribe) est appelé à chaque fois que vous ouvrez ce vc et donc vous avez beaucoup d'abonnés à l'événement du robinet. Où est ce code? viewDidLoad ou viewWillAppear par exemple.