条形按钮项目自定义视图未检测到 UITapGesture
Bar button item custom view not detecting UITapGesture
我遇到了一些奇怪的行为,其中 UIBarButtonItem.customView
中的子视图没有触发 tapGesture
。
private var leftBarButtonItem: UIBarButtonItem = {
let b = UIBarButtonItem()
return b
}()
private lazy var imageView: UIImageView = {
let iv = UIImageView()
//... some adicional setup
iv.isUserInteractionEnabled = true
return iv
}()
func setupBBItem() {
let holderView = UIView()
holderView.isUserInteractionEnabled = true
holderView.addSubview(imageView)
imageView.frame = //... some frame
//... more setups here
holderView.isUserInteractionEnabled = true
leftBarButtonItem.customView = holderView
navigationItem.leftBarButtonItem = leftBarButtonItem
let gesture = UITapGestureRecognizer(target: self, action: #selector(someFunction))
imageView.addGestureRecognizer(gesture)
}
@objc private func someFunction() {
print("tap gesture detected")
}
我什至尝试将手势添加到 holderView
,但结果是一样的,该功能永远不会触发。
我是不是漏掉了什么?
问题出在这一行:
let holderView = UIView()
这是一个零大小的视图。所以它的子视图,图像视图,可以被看到但不能被点击,因为在它的父视图之外的视图的任何部分是用户不可触及的。你需要给 holder view 一些尺寸,让它至少和 image view 一样大。特别是,您必须在内部使用自动布局约束对 holder view 和 image view 执行此操作。这就是条形按钮项目自定义视图获取其大小的方式。
我遇到了一些奇怪的行为,其中 UIBarButtonItem.customView
中的子视图没有触发 tapGesture
。
private var leftBarButtonItem: UIBarButtonItem = {
let b = UIBarButtonItem()
return b
}()
private lazy var imageView: UIImageView = {
let iv = UIImageView()
//... some adicional setup
iv.isUserInteractionEnabled = true
return iv
}()
func setupBBItem() {
let holderView = UIView()
holderView.isUserInteractionEnabled = true
holderView.addSubview(imageView)
imageView.frame = //... some frame
//... more setups here
holderView.isUserInteractionEnabled = true
leftBarButtonItem.customView = holderView
navigationItem.leftBarButtonItem = leftBarButtonItem
let gesture = UITapGestureRecognizer(target: self, action: #selector(someFunction))
imageView.addGestureRecognizer(gesture)
}
@objc private func someFunction() {
print("tap gesture detected")
}
我什至尝试将手势添加到 holderView
,但结果是一样的,该功能永远不会触发。
我是不是漏掉了什么?
问题出在这一行:
let holderView = UIView()
这是一个零大小的视图。所以它的子视图,图像视图,可以被看到但不能被点击,因为在它的父视图之外的视图的任何部分是用户不可触及的。你需要给 holder view 一些尺寸,让它至少和 image view 一样大。特别是,您必须在内部使用自动布局约束对 holder view 和 image view 执行此操作。这就是条形按钮项目自定义视图获取其大小的方式。