[英]addTarget on a Custom UI Button not working programmatically
我用这个初始化器创建了一个自定义 UIButton :
class CustomButton : UIButton{
override init(frame: CGRect) {
super.init(frame: frame)
setUpButtoninClass(frame)
addTarget(self, action: #selector(handleTap), for:.touchUpInside )
}
fileprivate func setUpButtoninClass(_ frame: CGRect) {
let padding : CGFloat = 16
self.frame = frame
layer.shadowColor = UIColor.darkGray.cgColor
layer.shadowOpacity = 0.3
layer.shadowOffset = .zero
layer.shadowRadius = 10
layer.cornerRadius = frame.width/2
backgroundColor = UIColor(white: 0.9, alpha: 1)
let buttonView = UIView(frame: frame)
buttonView.layer.cornerRadius = frame.width/2
buttonView.backgroundColor = .white
addSubview(buttonView)
let imageView = UIImageView(image: UIImage(named: "pen")?.withRenderingMode(.alwaysTemplate))
imageView.tintColor = UIColor(white: 0.7, alpha: 1)
buttonView.addSubview(imageView)
imageView.anchor(top: buttonView.topAnchor, leading: buttonView.leadingAnchor, bottom: buttonView.bottomAnchor, trailing: buttonView.trailingAnchor, padding: UIEdgeInsets.init(top: padding, left: padding, bottom: padding, right: padding))
}
@objc func handleTap(){
print("I'm here")
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}}
在初始化程序中,我添加了一个目标,但是当我实际初始化 VC 中的自定义按钮时,不调用#selector 方法(handleTap)。
这是VC中自定义Button的实现:
class ViewController: UIViewController {
let circularButton = CustomButton(frame: CGRect(x: 0, y: 0, width: 70, height: 70))
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(circularButton)
circularButton.center = view.center
}
我还尝试在 VC 中初始化 CustomButton 时添加目标,但没有任何改变。 我想知道我在设置按钮时哪里出错了。
我认为这是您的错,未检测到触摸是因为您在 UIButton 的顶部添加了 ImageView。
试试这个,或者这个,
buttonView.isUserInteractionEnabled = true
imageView.isUserInteractionEnabled = true
OMG,调试完你的代码后, buttonView
和imageView
位于顶部。 按钮在后面。 您可以设置颜色以更轻松地对其进行调试。 删除上面的2个视图使您的代码完美运行
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.