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

时间:2019-03-13 17:16:29

标签: ios swift uibutton interface-builder ibdesignable

我有一个自定义按钮控件,试图在其中显示按钮的图像,但是尽管已通过程序定义了它,但它并未出现。

@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)
    }

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

enter image description here

2 个答案:

答案 0 :(得分:0)

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

https://stackoverflow.com/a/40359161/10657724

创建映像时,您需要动态指定分发包,因为在设计时主捆绑包不可用。

答案 1 :(得分:0)

亚历克斯指出您的答案-https://stackoverflow.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!”。或“失败!”

如果您看到“有效!”您还应该看到您的图像。

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