2017-06-19 1201 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即可解決方法。