首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >RxSwift:如何在UILabel中添加手势?

RxSwift:如何在UILabel中添加手势?
EN

Stack Overflow用户
提问于 2017-06-19 20:07:51
回答 5查看 28.4K关注 0票数 31

我有一个label

使用isUserInteractionEnabled

设置为true.

..。现在,我需要添加UITapGestureRecognizer

为了标签。有没有办法添加

方式。

我已经看过RxSwift库了

这里

..。他们没有为添加手势提供任何扩展。UILabel+Rx文件只有

text

attributedText.

向标签添加手势有什么解决方法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-06-24 00:08:33

UILabel没有开箱即用的轻击手势识别器,这就是为什么RxCocoa不提供直接在标签上收听手势的方法。您必须自己添加手势识别器。然后,您可以使用Rx观察来自识别器的事件,如下所示:

代码语言:javascript
复制
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)
票数 72
EN

Stack Overflow用户

发布于 2020-02-07 21:47:08

Swift 5

(使用

RxGesture

库)。

最好也是最简单的选择。

代码语言:javascript
复制
label
        .rx
        .tapGesture()
        .when(.recognized) // This is important!
        .subscribe(onNext: { [weak self] _ in
            guard let self = self else { return }
            self.doWhatYouNeedToDo()
        })
        .disposed(by: disposeBag)

保重!

如果您不使用

点击手势将在您的标签初始化后立即触发!

票数 13
EN

Stack Overflow用户

发布于 2018-06-08 05:28:35

Swift 4

使用RxCocoa + RxSwift + RxGesture

代码语言:javascript
复制
let disposeBag = DisposeBag()
let myView = UIView()

myView.rx
  .longPressGesture(numberOfTouchesRequired: 1,
                    numberOfTapsRequired: 0,
                    minimumPressDuration: 0.01,
                    allowableMovement: 1.0)
            .when(.began, .changed, .ended)
            .subscribe(onNext: { pan in
                let view = pan.view
                let location = pan.location(in: view)
                switch pan.state {
                case .began:
                    print("began")
                case .changed:
                    print("changed \(location)")
                case .ended:
                    print("ended")
                default:
                    break
                }
            }).disposed(by bag)

或者

代码语言:javascript
复制
myView.rx
.gesture(.tap(), .pan(), .swipe([.up, .down]))
.subscribe({ onNext: gesture in
    switch gesture {
    case .tap: // Do something
    case .pan: // Do something
    case .swipeUp: // Do something 
    default: break       
    }        
}).disposed(by: bag)

或者

事件聪明,返回一个事件。即字符串

代码语言:javascript
复制
var buttons: Observable<[UIButton]>!

let stringEvents = buttons
        .flatMapLatest({ Observable.merge($0.map({ button in
            return button.rx.tapGesture().when(.recognized)
                .map({ _ in return "tap" })
            }) )
        })
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44630176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档