Apple Combine add TapPublisher to UIView



我可以添加一个tap publisher到UIView或UILabel吗?UIButton内置了tapPublisher。我试着做一个扩展,但是扩展不能存储属性。

另外,尝试在任何不是按钮的东西上使用tap publisher是不是不好的做法?

func bindViewModel() {
cancellables = [
continueButton.tapPublisher.sink { [unowned self] in
viewModel.action
.send(.question)
},
headlineLabel.tapPublisher.sink {
// Error: "Value of type 'UILabel' has no member 'tapPublisher'..."
})
]
}

实际上UIButton并没有内置它。我建议你使用扩展从构建自定义组合出版商在Swift

按钮很明显,在里面你只需要订阅.touchUpInsideaction。

但是与UILabelUIView它不是那么清楚:你必须添加你的手势识别器,确保你不会再添加一个,如果你已经添加了它。

您可以查看gestureRecognizers,但仍然有可能它不是您试图订阅的gestureRecognizer。您可以将自己的数据存储在关联对象中,但就性能而言,这不是最佳解决方案。

对于UILabel,您还需要打开userInteractionEnabled

我想说这对于一个扩展来说太逻辑了,但这取决于你。

最新更新