我可以添加一个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
按钮很明显,在里面你只需要订阅.touchUpInside
action。
但是与UILabel
或UIView
它不是那么清楚:你必须添加你的手势识别器,确保你不会再添加一个,如果你已经添加了它。
您可以查看gestureRecognizers
,但仍然有可能它不是您试图订阅的gestureRecognizer
。您可以将自己的数据存储在关联对象中,但就性能而言,这不是最佳解决方案。
对于UILabel
,您还需要打开userInteractionEnabled
。
我想说这对于一个扩展来说太逻辑了,但这取决于你。