2017-06-19 1203 views
3

我有一个labelisUserInteractionEnabled设置为true。现在,我需要为标签添加UITapGestureRecognizer。有没有办法以Rx的方式添加。RxSwift:如何向UILabel添加手势?

我已经看过了RxSwift库here。他们没有提供任何扩展来添加手势。 UILabel+Rx文件只有textattributedText

有任何解决方法来添加手势标签?

回答

15

UILabel没有配置开箱即用的手势识别器,这就是为什么RxCocoa没有提供直接在标签上聆听手势的方法。你将不得不自己添加手势识别器。然后你可以使用的Rx从识别器观察到的事件,就像这样:

let disposeBag = DisposeBag() 
let label = UILabel() 
label.text = "Hello World!" 

let tapGesture = UITapGestureRecognizer() 
label.addGestureRecognizer(tapGesture) 

tapGesture.rx.event.bind(onNext: { recognizer in 
    print("touches: \(recognizer.numberOfTouches)") //or whatever you like 
}).disposed(by: disposeBag) 
+0

对于我来说,它抛出'“的UILabel”不是“UIGestureRecognizer''错误的亚型。我正在使用'IBOutlet' – Rugmangathan

+1

我在答案中犯了一个错误。您需要在识别器上使用'rx.event'而不是标签。我刚刚更新了答案。 – RvdB

0

这些扩展在技术上是当前用RxSwift打包RxCocoa libary的一部分。

你应该能够在UITapGestureRecognizer添加到视图,然后只需用rx.event(rx_event如果以上)手势对象。

如果您必须在UILabel的上下文中执行此操作,那么您可能还需要将其包装在UILabel + Rx中,但是如果您有更简单的要求,则只需在手势上使用rx.event即可解决方法。