如何在点击按钮时观察 PublishSubject
how to observe PublishSubject on button tap
我正在处理这种情况,我想在这里应用 RxSwift。
我有 .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
}
}
我在 viewController
中创建了这个视图的一个实例
var rightButtonItemView = RightButtonItemView.instanceFromNib()
Bu 在我的 segue 中点击这个按钮我需要移动到下一个 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)
}
})
但我无法了解如何在更改发布主题状态时点击 link 按钮?
您在这种情况下使用 bind
运算符:
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)
}
}
-- 更新--
我想到了这个解决方案,我认为它更好。您根本不需要主题:
class RightButtonItemView: UIView {
@IBOutlet weak var rightButtonButton: UIButton!
var performEventSegue: Observable<Void> {
return rightButtonButton.rx.tap.asObservable()
}
}
我正在处理这种情况,我想在这里应用 RxSwift。
我有 .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
}
}
我在 viewController
中创建了这个视图的一个实例var rightButtonItemView = RightButtonItemView.instanceFromNib()
Bu 在我的 segue 中点击这个按钮我需要移动到下一个 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)
}
})
但我无法了解如何在更改发布主题状态时点击 link 按钮?
您在这种情况下使用 bind
运算符:
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)
}
}
-- 更新--
我想到了这个解决方案,我认为它更好。您根本不需要主题:
class RightButtonItemView: UIView {
@IBOutlet weak var rightButtonButton: UIButton!
var performEventSegue: Observable<Void> {
return rightButtonButton.rx.tap.asObservable()
}
}