2017-05-16 4 views
0

Je fais face à un tel cas et je pense à appliquer RxSwift ici.comment observer PublishSubject sur le bouton tap

J'ai .xib UIView avec le bouton.

class RightButtonItemView: UIView { 

    @IBOutlet weak var rightButtonimageView: UIImageView! 
    @IBOutlet weak var rightButtonButton: UIButton! 

    let performEventSegue = PublishSubject<Bool>() 

    class func instanceFromNib() -> RightButtonItemView { 
     return UINib(nibName: "NotificationView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! RightButtonItemView 
    } 

    override func awakeFromNib() { 
     //I'm not sure how should I link button tap and my subject 
     rightButtonButton.rx.tap 
    } 
} 

je créer une instance de ce point de vue dans mon viewController

var rightButtonItemView = RightButtonItemView.instanceFromNib() 

Bu cliquant sur ce bouton de mon Segue je dois passer à la prochaine VC, donc je vous inscrivant au sujet de UIView

rightButtonItemView.performEventSegue.asObserver().subscribe(onNext: { (isAuthorized) in 

     if isAuthorized { 
      let storyboard = UIStoryboard(name: "Notifications", bundle: nil) 
      let viewController = storyboard.instantiateViewController(withIdentifier: "UserNotificationsViewController") 
      self.present(viewController, animated: true, completion: nil) 
     } 
    }) 

Mais je ne peux pas obtenir comment puis-je lier le bouton tap avec l'état changeant de mon sujet de publication?

Répondre

1

Vous utilisez l'opérateur bind dans cette situation:

class RightButtonItemView: UIView { 

    @IBOutlet weak var rightButtonimageView: UIImageView! 
    @IBOutlet weak var rightButtonButton: UIButton! 

    let performEventSegue = PublishSubject<Void>() 
    private let bag = DisposeBag() 

    class func instanceFromNib() -> RightButtonItemView { 
     return UINib(nibName: "NotificationView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! RightButtonItemView 
    } 

    override func awakeFromNib() { 
     rightButtonButton.rx.tap 
      .bind(to: performEventSegue) 
      .disposed(by: bag) 
    } 
} 

- MISE À JOUR -

je pensais de cette solution et je pense qu'il vaut mieux. Vous n'avez pas besoin du sujet du tout:

class RightButtonItemView: UIView { 

    @IBOutlet weak var rightButtonButton: UIButton! 

    var performEventSegue: Observable<Void> { 
     return rightButtonButton.rx.tap.asObservable() 
    } 
}