UILabel 点击手势识别器似乎不起作用
UILabel tap gesture recognizer doesn't seem to work
我知道这是一个经常被问到的问题,但我有一个特定的问题案例,因为我抽象了 tapGestureRecognizer,因此它可以在每次都初始化它的情况下重新使用。
以下是我在 UIlabel 上使用 UITapGestureRecognizer 的方法:
在 UILabel 扩展中:
func setOnClickListener(action: @escaping (_: Any?) -> Void, clickedObject: Any? = nil){
let tapRecogniser = ClickListener(target: self, action: #selector(onViewClicked), clickedObject: clickedObject, onClick: action)
self.addGestureRecognizer(tapRecogniser)
}
@objc func onViewClicked(_ sender: ClickListener) {
sender.onClick?(sender.clickedObject)
}
ClickListener class :
class ClickListener: UITapGestureRecognizer {
var onClick : ((_: Any?) -> Void)?
var clickedObject: Any?
init(target: Any?, action: Selector?, clickedObject: Any? = nil, onClick: ((_: Any?) -> Void)? = nil) {
self.clickedObject = clickedObject
self.onClick = onClick
super.init(target: target, action: action)
}
}
在我看来这里是这样称呼它的:
class VoteBoxView: UIView {
private var updateVoteButton: UILabel! = UILabel()
override init(frame: CGRect) {
super.init(frame: .zero)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func initLayout() {
self.addSubview(updateVoteButton)
self.updateVoteButton.text = "Modifier"
self.updateVoteButton.setToSecondaryText()
self.updateVoteButton.setToSecondaryTextColor()
self.updateVoteButton.underline()
self.updateVoteButton.snp.makeConstraints{ (make) -> Void in
make.top.equalTo(self).offset(15)
make.right.equalTo(self)
}
self.initActions()
}
func initActions() {
updateVoteButton.isUserInteractionEnabled = true
updateVoteButton.setOnClickListener(action: updateVote, clickedObject: nil)
}
func updateVote(clickedObject: Any?) {
self.toggleResults(active: false)
}
}
我确实成功地让它在其他情况下工作,但我发现没有任何差异会导致它在这里不起作用。
问题是我没有为我的视图设置正确的约束,所以点击被我的 ViewController 视图阻止了。我通过在所有内容上添加彩色背景发现了这一点。
我知道这是一个经常被问到的问题,但我有一个特定的问题案例,因为我抽象了 tapGestureRecognizer,因此它可以在每次都初始化它的情况下重新使用。
以下是我在 UIlabel 上使用 UITapGestureRecognizer 的方法:
在 UILabel 扩展中:
func setOnClickListener(action: @escaping (_: Any?) -> Void, clickedObject: Any? = nil){
let tapRecogniser = ClickListener(target: self, action: #selector(onViewClicked), clickedObject: clickedObject, onClick: action)
self.addGestureRecognizer(tapRecogniser)
}
@objc func onViewClicked(_ sender: ClickListener) {
sender.onClick?(sender.clickedObject)
}
ClickListener class :
class ClickListener: UITapGestureRecognizer {
var onClick : ((_: Any?) -> Void)?
var clickedObject: Any?
init(target: Any?, action: Selector?, clickedObject: Any? = nil, onClick: ((_: Any?) -> Void)? = nil) {
self.clickedObject = clickedObject
self.onClick = onClick
super.init(target: target, action: action)
}
}
在我看来这里是这样称呼它的:
class VoteBoxView: UIView {
private var updateVoteButton: UILabel! = UILabel()
override init(frame: CGRect) {
super.init(frame: .zero)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func initLayout() {
self.addSubview(updateVoteButton)
self.updateVoteButton.text = "Modifier"
self.updateVoteButton.setToSecondaryText()
self.updateVoteButton.setToSecondaryTextColor()
self.updateVoteButton.underline()
self.updateVoteButton.snp.makeConstraints{ (make) -> Void in
make.top.equalTo(self).offset(15)
make.right.equalTo(self)
}
self.initActions()
}
func initActions() {
updateVoteButton.isUserInteractionEnabled = true
updateVoteButton.setOnClickListener(action: updateVote, clickedObject: nil)
}
func updateVote(clickedObject: Any?) {
self.toggleResults(active: false)
}
}
我确实成功地让它在其他情况下工作,但我发现没有任何差异会导致它在这里不起作用。
问题是我没有为我的视图设置正确的约束,所以点击被我的 ViewController 视图阻止了。我通过在所有内容上添加彩色背景发现了这一点。