2017-05-16 9 views
0

私はそのようなケースを扱っています。ここではRxSwiftを適用すると思います。ボタンタップでPublishSubjectを観察する方法

私は.xibボタン付きのUIViewを持っています。

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 
    } 
} 

私は次のVCに移動する必要があるので、私は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) 
     } 
    }) 
を購読する私のセグエからこのボタンをクリックする私のViewController

var rightButtonItemView = RightButtonItemView.instanceFromNib() 

富栄に、このビューのインスタンスを作成します

しかし、私はどのように私の出版物の状態の変化する状態とボタンのタップをリンクすることができないのですか?

あなたはこのような状況で bind演算子を使用

答えて

1

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) 
    } 
} 

- UPDATE -

を私はこの解決策を考えて、私はそれが良いことだと思います。件名はまったく必要ありません。

class RightButtonItemView: UIView { 

    @IBOutlet weak var rightButtonButton: UIButton! 

    var performEventSegue: Observable<Void> { 
     return rightButtonButton.rx.tap.asObservable() 
    } 
} 
関連する問題