swift2 Swift,点击时自定义UIButton不工作

20jt8wwn  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(205)

我有一个自定义的UIButton创建与xib文件。当我使用我的视图上的自定义按钮,它不工作时,我按下它。
我的RoundBtn.swift文件:

import UIKit

@IBDesignable class RoundBtn: UIButton {

    var nibName = "RoundBtn"

    @IBOutlet weak var btnImageView: UIImageView!
    @IBOutlet weak var btnLabel: UILabel!

    @IBInspectable var image: UIImage? {
        get {
            return btnImageView.image
        } set(image) {
            btnImageView.image = image
        }
    }

    @IBInspectable var label: String? {
        get {
            return btnLabel.text
        } set(label) {
            btnLabel.text = label
        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    func setup() {
        let view = loadViewFromNib()
        view.frame = self.bounds
        view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
        btnImageView.layer.cornerRadius = 60/2
        btnImageView.layer.borderColor = UIColor(red: 5/255,
            green: 66/255, blue: 38/255, alpha: 1).CGColor
        btnImageView.layer.borderWidth = 2
        btnLabel.font = UIFont.boldSystemFontOfSize(14.0)
        btnImageView.userInteractionEnabled = true
        btnLabel.userInteractionEnabled = true
        view.userInteractionEnabled = true
        addSubview(view)
    }

    func loadViewFromNib() -> UIButton {
        let bundle = NSBundle(forClass: self.dynamicType)
        let nib = UINib(nibName: nibName, bundle: bundle)
        let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIButton   
        return view
    }   
}

我的RoundBtn.xib文件:

查看我使用自定义按钮的位置:

我在所有视图组件上启用了userInteractionEnabled。当我点击我的自定义按钮时,它不工作。我尝试通过编程定义单击和定义操作segue(显示)。

@IBAction func myCartBtnPressed(sender: AnyObject) {
    print("my cart btn pressed")
}
kzipqqlq

kzipqqlq1#

我认为这是因为您使用userInteractionEnabled向当前UIButton添加了几个UIViews子视图,这意味着它们正在处理用户输入。
如果您这样做:

view.isUserInteractionEnabled = false

RoundBtn本身将获得所有的触摸事件,而不是您在顶部的UIViews。

efzxgjgh

efzxgjgh2#

引用@fdiaz的回答. Swift 4记法。
相反,如果将某个UIButton(或用户交互视图)附加到UIImageView,则必须将其isUserInteractionEnabled = true设置为允许触摸通过层次结构向上向下到达UIButton。

相关问题