我有一个label
使用isUserInteractionEnabled
设置为true
.
..。现在,我需要添加UITapGestureRecognizer
为了标签。有没有办法添加
方式。
我已经看过RxSwift库了
这里
..。他们没有为添加手势提供任何扩展。UILabel+Rx
文件只有
text
和
attributedText
.
向标签添加手势有什么解决方法吗?
发布于 2017-06-24 00:08:33
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)
发布于 2020-02-07 21:47:08
Swift 5
(使用
RxGesture
库)。
最好也是最简单的选择。
label
.rx
.tapGesture()
.when(.recognized) // This is important!
.subscribe(onNext: { [weak self] _ in
guard let self = self else { return }
self.doWhatYouNeedToDo()
})
.disposed(by: disposeBag)
保重!
如果您不使用
点击手势将在您的标签初始化后立即触发!
发布于 2018-06-08 05:28:35
Swift 4
使用RxCocoa + RxSwift + RxGesture
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)
或者
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)
或者
事件聪明,返回一个事件。即字符串
var buttons: Observable<[UIButton]>!
let stringEvents = buttons
.flatMapLatest({ Observable.merge($0.map({ button in
return button.rx.tapGesture().when(.recognized)
.map({ _ in return "tap" })
}) )
})
https://stackoverflow.com/questions/44630176
复制相似问题