如何在设计器中的自定义按钮控件上显示图像

How to show image on custom button control in designer

我有一个自定义按钮控件,我试图在其中显示按钮的图像,但尽管以编程方式定义它,但它没有出现。

@IBDesignable class UCButtonNext: UIButton {
    // setup programatically
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupButton()
    }

    // setup via Storyboard
    required init?(coder aDecoder: NSCoder) {
        //fatalError("init(coder:) has not been implemented")
        super.init(coder: aDecoder)
        setupButton()
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        setupButton()
    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        setupButton()
    }

    func setupButton() {
        setupButtonStyle()
        setupShadow()
    }

    func setupButtonStyle() {
        setTitleColor(.white, for: .normal)

        backgroundColor         = UIColor.clear
        titleLabel?.font        = UIFont(name: "Courier", size: 18)
        setTitleColor(UIColor.black, for: .normal)

        layer.cornerRadius      = frame.height / 2
        layer.borderWidth       = 1.0
        layer.borderColor       = UIColor.white.cgColor

        setImage(UIImage(named: "btnArrowRight"), for: .normal)
    }

我的按钮显示在设计器中,但似乎无法显示图像。

这个问题的答案可能有帮助:

您需要在创建图像时动态指定包,因为主包在设计时不可用。

亚历克斯指出的答案 - https://whosebug.com/a/40359161/10657724 - 应该是你需要的。

为了帮助您调试问题,请更改此行:

setImage(UIImage(named: "btnArrowRight"), for: .normal)

至:

    // DYNAMIC BUNDLE DEFINITION FOR DESIGNABLE CLASS
    let dynamicBundle = Bundle(for: type(of: self))

    // AND THEN SUCCESSFULLY YOU CAN LOAD THE RESSOURCE
    if let image = UIImage(named: "btnArrowRight", in: dynamicBundle, compatibleWith: nil) {
        setImage(image, for: .normal)
        setTitle("Works!", for: .normal)
    } else {
        setTitle("Failed!", for: .normal)
    }

这会将您的按钮标题设置为 "Works!" 或 "Failed!"

如果您看到 "Works!",您应该也会看到您的图片。

否则,你的图片资源有问题。