繁体   English   中英

自定义 UI 按钮上的 addTarget 无法以编程方式工作

[英]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 时添加目标,但没有任何改变。 我想知道我在设置按钮时哪里出错了。

编辑 1:这是调试视图层次结构调试层次结构

我认为这是您的错,未检测到触摸是因为您在 UIButton 的顶部添加了 ImageView。
试试这个,或者这个,

buttonView.isUserInteractionEnabled = true
imageView.isUserInteractionEnabled = true

OMG,调试完你的代码后, buttonViewimageView位于顶部。 按钮在后面。 您可以设置颜色以更轻松地对其进行调试。 删除上面的2个视图使您的代码完美运行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM